Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Layout 如何在SailsJS应用程序中使用多个布局?_Layout_Ejs_Sails.js - Fatal编程技术网

Layout 如何在SailsJS应用程序中使用多个布局?

Layout 如何在SailsJS应用程序中使用多个布局?,layout,ejs,sails.js,Layout,Ejs,Sails.js,我的Sails.js应用程序有单独的前端和管理布局。 我的视图引擎是ejs 如何为前端和管理站点使用单独的布局 我可以为每个操作使用特定的布局吗?来自: 至少在EJS中,您必须使用_layoutFile,而不是用本地布局指示自定义布局: res.view({ _layoutFile: 'relativePathToYourCustomLayoutFromTheTargetView.ejs' }); 应该相对于要渲染的视图指定要使用的布局的路径。因此,如果您在UserController的创

我的Sails.js应用程序有单独的
前端
管理
布局。 我的视图引擎是
ejs

如何为前端和管理站点使用单独的布局

我可以为每个操作使用特定的布局吗?

来自:

至少在EJS中,您必须使用_layoutFile,而不是用本地布局指示自定义布局:

res.view({
  _layoutFile: 'relativePathToYourCustomLayoutFromTheTargetView.ejs'
});
应该相对于要渲染的视图指定要使用的布局的路径。因此,如果您在UserController的创建操作中,呈现一个视图(views/user/create.ejs),那么自定义布局的相对路径可能是:
。/staticSiteLayout.ejs

PROJECT FOLDER
└── views
    ├── staticSiteLayout.ejs
    ├── layout.ejs
    └── user
        └── create.ejs
更新:

文档似乎与代码有点脱节,因此对于当前(v0.9.8)版本,要走的路如下:

module.exports = { 
  index: function(req, res){
    res.view({ layout: 'layoutadmin' });
  }
}

在Sails 0.10中,您可以在控制器中设置不同的布局,如下所示:

// override the layout to use another
    res.locals.layout = 'layouts/layout2';
    return res.view('test');

详细解释。

很抱歉向您发送垃圾邮件,但我的应用程序需要类似的解决方案。在routes.js中定义布局将非常好,例如/admin/*将使用一个布局,而eg./app/*将使用另一个布局,等等。因为这是一个pita-do,深入控制器并使用静态布局路径对其进行过度调整。我尝试过这个概念,但似乎只有在routes.js配置文件中定义了一个控制器时它才起作用,例如:

module.exports.routes = {

   '/admin/*' : {
      controller: 'AdminController',
      action: 'index',
      locals: {
         layout: 'admin/layout'
      }
   }
};
这是可行的,但是将管理员的所有操作路由到同一个控制器中,这当然是错误的。如果省略控制器部分,则该概念始终使用默认视图/layout.ejs,并且未设置本地:

module.exports.routes = {

   '/admin/*' : {
      locals: {
         layout: 'admin/layout'
      }
   }
};

这不起作用,但最好这样做。

如果需要在控制器(Sails v0.11)中设置视图和布局:

布局:

空=无


“folder/layout”=您的布局在Sails v0.12中,如果您需要在控制器中设置布局,您可以创建一个新文件夹(例如“layout”)并推送布局文件

res.view('auth/login', {layout: layout/my_file_layout}
您还可以执行以下操作:

res.locals.layout = "layout/my_file_layout";
res.view('auth/login');

我试过这个,但似乎不起作用。这是我的代码:
module.exports={index:function(req,res){res.view({{u layoutFile:'../layoutadmin.ejs'}}}
它总是呈现我在config/views.js中定义的默认布局。你能试试
module.exports={index:function(req,res){res res view({layout:'layoutadmin'}}}}
?尽管有文档,但这似乎是管理布局的一种更合适的方式。它工作起来很有魅力!应在主要答案和SailsJS文档中更新。谢谢你,@bredikhin先生!谢谢@bredikhin,我们会在文档中更新。您完全正确,您需要将一个本地
layout
变量设置为布局的字符串名称/路径。这在v0.10中也是一致的。
res.locals.layout = "layout/my_file_layout";
res.view('auth/login');