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