首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node.js +在呈现视图之前附加到模型中

Node.js +在呈现视图之前附加到模型中
EN

Stack Overflow用户
提问于 2015-09-19 15:19:45
回答 1查看 777关注 0票数 1

我正在建立一个使用Node.js和快车的网站。对于视图引擎,我使用的是瓦什

在我的应用程序中,我有一个layout.vash文件作为我的应用程序的主要布局。看起来是这样的:

layout.vash

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>@model.title</title>
  </head>
  <body>
    @html.block('content')
  </body>
</html>

然后,我看到的视图如下所示:

view.vash

代码语言:javascript
运行
复制
@html.extend('layout', function(model){
    @html.block('content', function(model){
      <h1>Hello</h1>
    })
})

视图是通过Express引用的,其路径类似于以下内容:

代码语言:javascript
运行
复制
var router = require('express').Router();
router.get('/', function(req, res) {
    var viewModel = {
      title: 'Hello'
    };

    res.render('view', viewModel);
});

我的viewModel对于每个视图都是独一无二的。但是,有些属性在所有视图之间都是共享的。例如,出于开发目的,我想知道请求是本地的还是非本地的。如果我在使用ASP.NET,我知道我可以说:

@if (Request.IsLocal) { ... }

然而,我不知道如何对Node和Vash做类似的事情。我的直觉告诉我,我需要在我的model中添加一个名为model的属性。然而,我不确定这是否是正确的想法,或者说这是否可能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-19 16:15:46

我在我的个人代码中使用了你正在考虑的方法。

如果要附加到模型的值跨多个路由是常见的,请考虑使用一个函数来扩展模型:

代码语言:javascript
运行
复制
function appendRouteData(model) {
    model.routes = {};
    model.routes.controller = "SomeController";
    model.routes.action = "index";
    model.routes.parameters = { foo: "bar" };
    return model;
}

...

viewModel = appendRouteData(viewModel);

作为对您的评论的回应,在您的users.js中包含这样一个函数有多种方法。

要么将该方法公开为另一个模块并要求它,要么,如果我们要疯狂地注入一个执行相同功能的函数,但这需要一些重构。我想你只会做一些疯狂的事.

代码语言:javascript
运行
复制
// routes.js
var UserRoutes = require('./users');
function appendRouteData(controllerName) {
    // some crazy javascript here, might want to contemplate how this actually works first.
    return function (viewModel) {
        viewModel.routes.controller = controllerName;
        return viewModel;
    };
}

module.exports = {
    users: UserRoutes(appendRouteData('users'))
};

// users.js
function UserRoutes(appendRouteData) {
    var router = require('express').Router();
    router.get('/users', function (req, res) {
        var viewModel = {};
        viewModel = appendRouterData(viewModel);
        res.render('users/index', viewModel);
    });
    return router;
}
module.exports = UserRoutes;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32669883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档