SailsJS将对象/variables传递给布局视图的正确方法
你好,我想知道是否有一个正确的方法来传递一个variables或对象到布局视图?
这就是我现在正在做的,它的工作原理
index: function(req, res){ res.view({ layout: 'mylayout', myvar: 'This is a view var' }); }
但是在每个动作中,我必须定义'myvar',所以我可以在布局级别使用它,所以我想知道是否有某种控制器或布局的动作,所以我可以在那里放置我的逻辑?
实际上从Sails v0.10-rc5开始,你可以使用sails.config.views.locals
hash来指定应该默认提供给所有视图的variables。 所以在config/views.js
,像这样:
{ locals: { myvar : 'this is a view var' } }
会将var添加到每个视图。 这对影响视图引擎的variables最为有用; 在这里看到更多的细节。
您也可以在Sails v0.10.x中使用策略 ,通过修改req.options.locals
来在多个视图中设置variables。 所以如果你创build了一个/api/policies/decorate.js
策略:
module.exports = function(req, res, next) { // Default to an object if empty, or use existing locals that may have // been set elsewhere req.options.locals = req.options.locals || {}; // Set a new local var that will be available to any controller that // implements the policy req.options.locals.myVar = Math.random()
然后用类似下面的方法设置/config/policies.js
:
module.exports = { '*': 'decorate' }
那么任何使用res.view
控制器动作都会在视图中使用myVar
variables。
这取决于你用sailsconfiguration的布局引擎(ejs是默认的)。 然而,传递variables到视图通常是这样做的:
index: function(req, res){ res.view({ layout: 'mylayout', myModel: modelObj }); }
您必须在使用它的每个视图中注入模型。 如果您想要在全局范围内注册模型,您必须使用如下所述的自定义中间件: 如何使用Express / Node.JS创build在所有视图中可访问的全局variables?
你可以使用config.views.locals,但我想保持这个config文件夹,并把它放在api / services目录中。 我把它叫做api / services / page.js
然后添加一些variables和其他视图助手,如果你想。
module.exports = { title:'test', appName: 'My App Name', getBlueprintPath: function (path) { return sails.config.blueprints.prefix + path; }, };
那么我认为我有
<%= page.appName %>
这样做的好处是你的逻辑保存在api目录里面。 你仍然可以设置视图的本地人,而不是无意中覆盖你以前在config.views.local中设置的一些variables。
- 使用Express的Nodejs – 将mongoDB和mongoose添加到package.json并运行npm install时出错
- expressionjs 4如何提供json结果而不呈现任何视图/ css
- 表示js winstonlogging客户端的ip地址
- 在express中,获取包含特殊字符的request.query
- 什么app.set函数(express.js)呢?
- Node.js Express app:如果存在cookie,则将CSS class添加到服务器端的元素中
- 蓝鸟答应在快递/mongoose中过早返回
- 如何使用nodeJS连接到隐式FTPS服务器?
- Nodejs将angular色连接到数据库表