【发布时间】:2014-01-24 16:25:57
【问题描述】:
我的 Sails.js 应用程序具有单独的 frontend 和 admin 布局。
我的视图引擎是ejs。
如何为前端和管理站点使用不同的布局?
我可以为每个动作使用特定的布局吗?
【问题讨论】:
我的 Sails.js 应用程序具有单独的 frontend 和 admin 布局。
我的视图引擎是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' });
}
}
【讨论】:
module.exports = { index: function(req, res){ res.view({ _layoutFile: '../layoutadmin.ejs' }); } }
module.exports = { index: function(req, res){ res.view({ layout: 'layoutadmin' }); } }吗?尽管有文档,what they have in the code 似乎是管理布局的更合适的方式。
layout 变量设置为布局的字符串名称/路径。这在 v0.10 中也是一致的。
在 Sails 0.10 中,您可以在控制器中设置不同的布局,如下所示:
// override the layout to use another
res.locals.layout = 'layouts/layout2';
return res.view('test');
详解here。
【讨论】:
在 Sails v0.12 中,如果您需要在控制器中设置布局,您可以创建一个新文件夹(例如“layout”)并推送布局文件。
res.view('auth/login', {layout: layout/my_file_layout}
你也可以这样做:
res.locals.layout = "layout/my_file_layout";
res.view('auth/login');
【讨论】:
很抱歉向您发送垃圾邮件,但我的应用需要类似的解决方案。在 routes.js 中定义布局会很棒,例如 /admin/* 将使用一种布局,例如。 /app/* 将使用另一个,等等。因为它是一个皮塔饼,所以潜入控制器并使用静态布局路径过度垃圾邮件。我尝试了这个概念,但它似乎只有在我还在 routes.js 配置文件中定义一个控制器时才有效,例如:
module.exports.routes = {
'/admin/*' : {
controller: 'AdminController',
action: 'index',
locals: {
layout: 'admin/layout'
}
}
};
这确实有效,但是将 admin 的所有操作路由到同一个控制器,这当然是错误的。如果我省略了控制器部分,则该概念始终使用默认的 view/layout.ejs 并且未设置本地:
module.exports.routes = {
'/admin/*' : {
locals: {
layout: 'admin/layout'
}
}
};
这不起作用,但最好是这样。
【讨论】:
如果您需要在控制器中设置视图和布局(Sails v0.11):
res.view('auth/login', { layout: null } );
布局:
null = 无
'文件夹/布局' = 你的布局
【讨论】: