我的Sails.js应用程序具有单独的frontend
和admin
布局。
我的视图引擎是ejs
。
如何为前端和管理站点使用单独的布局?
我可以为每个操作使用特定的布局吗?
答案 0 :(得分:3)
至少在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' });
}
}
答案 1 :(得分:3)
在Sails 0.10中,您可以在控制器中设置不同的布局:
// override the layout to use another
res.locals.layout = 'layouts/layout2';
return res.view('test');
详细解释here。
答案 2 :(得分:2)
在Sails v0.12中,如果需要在控制器中设置布局,可以创建一个新文件夹(例如“布局”)并推送布局文件。
res.view('auth/login', {layout: layout/my_file_layout}
你也可以这样做:
res.locals.layout = "layout/my_file_layout";
res.view('auth/login');
答案 3 :(得分:0)
很抱歉发送垃圾邮件,但我的应用需要类似的解决方案。在 routes.js 中定义布局会很棒,所以例如/ admin / *会使用一个布局,例如。 / app / *会使用另一个,等等。因为它是一个皮塔确实潜入控制器并用静态布局路径覆盖它们。我尝试了这个概念,但它似乎只有在我在 routes.js 配置文件中定义一个控制器时才有用,例如:
" 'object' does not contain a definition for 'getWebRequest' "
这确实有效,但是将管理员的所有操作都路由到同一个控制器,这当然是错误的。如果省略控制器部分,那么该概念总是使用默认的view / layout.ejs并且未设置本地:
module.exports.routes = {
'/admin/*' : {
controller: 'AdminController',
action: 'index',
locals: {
layout: 'admin/layout'
}
}
};
这不起作用,但这样做是理想的。
答案 4 :(得分:0)
如果需要在控制器中设置视图AND布局(Sails v0.11):
Dim findWord As String
Dim aCell As Range
For Each ColourCell In CopyRange
Select Case ColourCell.value
Case "Blue"
findWord = "Aqua"
Case "Red"
findWord = "Pink"
Case "Yellow"
findWord = "Orange"
Case Else
findWord = ""
End Select
If findWord <> "" Then
Set aCell = PasteRange.Find(What:=findWord, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows,SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
ColourCell.Offset(, 1).Copy
aCell.Offset(, 1).PasteSpecial xlPasteValues
End If
End If
Next ColourCell
<强>布局:强>
null =无
'folder / layout'=您的布局