在构建包含许多不同页面的应用程序时,将多个 HTML 文件共享的标记提取到布局中可能会有所帮助。这减少了项目中的代码总量,并有助于避免将来在多个文件中进行相同的更改。
在 Sails 和 Express 中,布局由视图引擎本身实现。例如,jade
具有自己的布局系统,并使用自己的语法。
为了方便起见,Sails 在使用默认视图引擎 EJS 时捆绑了对布局的特殊支持。如果您想使用其他视图引擎的布局,请查看该视图引擎的文档以找到合适的语法。
Sails 布局是应用程序 views/
文件夹中的特殊 .ejs
文件,可用于“包装”或“夹住”其他视图。布局通常包含前言(例如,<!DOCTYPE html><html><head>....</head><body>
)和结论(</body></html>
)。使用 <%- body %>
包含原始视图文件。布局绝不单独使用:这就像给别人提供一个面包三明治一样。
可以在config/views.js
中配置或禁用应用程序的布局支持,并且可以通过设置一个名为 layout
的特殊局部变量 来覆盖特定路由或操作的布局支持。默认情况下,Sails 将使用位于 views/layouts/layout.ejs
的布局编译所有视图。
要指定视图使用的布局,请参见以下示例。在有关路由 的文档中可以找到更多信息。
下面的示例路由将在位于 ./views/users.ejs
的布局中使用位于 ./views/users/privacy.ejs
的视图
'get /privacy': {
view: 'users/privacy',
locals: {
layout: 'users'
}
},
下面的示例控制器操作将在位于 ./views/users.ejs
的布局中使用位于 ./views/users/privacy.ejs
的视图
privacy: function (req, res) {
res.view('users/privacy', {layout: 'users'})
}
为什么布局只适用于 EJS?
几年前,Express 中对布局/部分的支持被弃用。相反,开发人员被期望依赖视图引擎本身来实现此功能。(有关更多信息,请参见https://github.com/balderdashy/sails/issues/494。)
为了方便起见,Sails 支持旧版
layouts
功能,并与 Express 2.x 和 Sails 0.8.x 应用程序向后兼容,特别是对于从其他 MVC 框架转来的新社区成员而言,它提供了熟悉感。因此,布局只针对默认视图引擎 (ejs) 进行了测试。如果您不喜欢布局,或者(暂时)如果您使用的是除了 ejs 之外的服务器端视图引擎(例如 Jade、handlebars、haml、dust),则需要在
sails.config.views
中设置layout:false
,并依赖于视图引擎的自定义布局/部分支持。