SailsJS将对象/变量传递给布局视图的正确方法

Rod*_*ano 5 javascript node.js express sails.js

您好我想知道是否有一种将变量或对象传递给布局视图的正确方法?

这就是我现在正在做的事情并且它有效

index: function(req, res){
 res.view({ layout: 'mylayout', myvar: 'This is a view var' });
}
Run Code Online (Sandbox Code Playgroud)

但是在每个动作中我都要定义'myvar',这样我就可以在布局级别使用它,所以我想知道是否有某种控制器或布局动作,所以我可以放置我的逻辑?

sgr*_*454 19

实际上从Sails v0.10-rc5开始,您可以使用sails.config.views.localshash来指定默认情况下应该为所有视图提供的变量.所以,在config/views.js这样的:

{
   locals: {
      myvar : 'this is a view var'
   }
}
Run Code Online (Sandbox Code Playgroud)

将var添加到每个视图.这对影响视图引擎的变量非常有用; 请看这里了解更多详情.

您还可以使用Sails v0.10.x中的策略通过更改来跨多个视图设置变量req.options.locals.因此,如果您创建了一个策略/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()
Run Code Online (Sandbox Code Playgroud)

然后设置你/config/policies.js的东西:

 module.exports = {

    '*': 'decorate'

 }
Run Code Online (Sandbox Code Playgroud)

那么任何使用的控制器动作res.view都会myVar在视图中提供该变量.