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

时间:2014-01-07 04:35:37

标签: layout ejs sails.js

我的Sails.js应用程序具有单独的frontendadmin布局。 我的视图引擎是ejs

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

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

5 个答案:

答案 0 :(得分:3)

来自Sails.js Documentation

至少在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'=您的布局