我运行Sails0.9.7
并安装了受Consolidate.js支持的Handlebars ,因此受 Sails 支持
我可以从.handlebars
文件中提供页面,它工作得很好。我不知道在 Sails 工作流程中,在Sails 方式中,我应该在哪里注册partials、helpers 等……我更多的是寻找最佳实践,而不仅仅是一个可行的解决方案,但任何帮助都将不胜感激。
我运行Sails0.9.7
并安装了受Consolidate.js支持的Handlebars ,因此受 Sails 支持
我可以从.handlebars
文件中提供页面,它工作得很好。我不知道在 Sails 工作流程中,在Sails 方式中,我应该在哪里注册partials、helpers 等……我更多的是寻找最佳实践,而不仅仅是一个可行的解决方案,但任何帮助都将不胜感激。
我正在运行 v0.10 测试版,但这不应该影响我在下面的工作方式:
配置/views.js
module.exports.views = {
engine : 'handlebars',
layout : false
};
配置/routes.js
'/': {
controller: 'site',
action: 'index'
},
站点控制器.js
module.exports = {
// Render Index View
index: function(req, res) {
res.view({
partials: {
head: 'partials/head',
tail: '../partials/tail',
},
});
}
};
视图/站点/index.handlebars
{{> head}}
<h3>SITE INDEX</h3>
视图/站点/部分/head.handlebars
<h1>HEAD</h1>
{{> tail}}
视图/部分/tail.handlebars
<h2>HEAD TAIL</h2>
<h1>HEAD</h1>
<h2>HEAD TAIL</h2>
<h3>SITE INDEX</h3>
我正在使用上面给出的答案,但我似乎已经让部分功能与sails 0.9.8 一起工作而没有黑客攻击。
这就是我所拥有的。
Config/views.js => 引擎:“车把”
views/home/index.handlebars => 使用部分的主文件。
views/home/partials/partial.handlebars => 部分被使用。
那么只要你使用这样的东西,它就可以完美地工作。res.view({ partials: { partial: 'partials/partial', 页脚: 'partials/footer' } })
路径相对于默认调用的模板文件。因此,如果您希望每个控制器有不同的部分,则使用 partials/;如果您希望所有模板的全局部分,则使用 ../partials/
显然,这完全适合您,因为无论如何您都需要在控制器中手动指定每个部分。
编辑:这很容易通过 express3-handlebars 模块实现,同时不更改任何默认 Sails 功能,除了要求您将布局文件移动到views/layouts
. 如果您想查看它, 我已经在这里( https://github.com/balderdashy/sails/pull/1075 )打开了一个拉取请求。
在对sails 源代码进行了一些挖掘之后,在渲染视图时很容易引入局部视图。
当您调用res.view
控制器操作时,只需传入一个局部对象作为“本地”的一部分,其中包含您想要呈现的局部列表。
// LoginController.js
new: function (req, res) {
res.view({
partials: {
header: '../partials/header',
footer: '../partials/footer'
}
})
}
// new.handlebars
{{> header}}
<b>Main content</b>
{{> footer}}
可以以类似的方式注册助手,方法是附加一个名为helpers
并传入功能的键。
如果在 Sails 核心中有一种更正式的方式来执行此操作会很好,但现在这对于那些想要使用把手而不是 ejs 同时保留一些布局外观的人来说应该足够了。
供参考,
如果您使用的是 Sails 0.10 或更高版本,我已在https://www.npmjs.org/package/sails-generate-views-handlebars发布了一个 NPM 包以生成默认车把视图
还有一个针对sails-generate-backend 的建议PR,以便在使用“sails generate –template==handlebars”时正确支持车把的布局和部分,而无需额外的代码和基于路径自动发现部分(又名。视图/部分的/**)
见:https ://github.com/balderdashy/sails-generate-backend/pull/9
我的时间不多了,但我想我已经接近答案了。当我获得更多详细信息时,我会更新此回复,但如果您想查看它,请查看包含的 consolidate.js 文件中的第 501 行。在 github 上查看:https ://github.com/balderdashy/sails/blob/master/lib/configuration/consolidate.js#L501
看起来对于 Handlebars 有一个 for 循环从 options.partials 注册部分。
这不是一个非常令人满意的解决方案,但如果你将你的部分推到那个选项对象上,那么它可能会从中拉出来。
我接下来要问的一个大问题是,选项对象是什么,它在哪里设置?
要在sails js 中配置车把模板,请按照以下步骤操作:
1) 在应用程序的 node_modules 文件夹中安装把手:
npm 安装车把
2)改变你的配置/views.js
engine: 'handlebars',
layout: 'layouts/layout', // layouts is subfolder of view folder in sails app and layout is a handlebars inside layouts folder.
partials: 'partials'
如果我们对文件使用 .handlebars 扩展名而不是 .hbs,Sails 本身就支持把手及其(多布局、部分)。
所以要在 Sails 中使用把手而不是 EJS,建议使用consolidate(它是一个模板引擎安慰库)。Handlebars 与SailsJs + consolidate配合使用效果很好。
您需要安装合并。
npm install consolidate --save
然后您只需使用以下内容更新config/views.js文件。
module.exports.views = {
engine: {
ext: 'handlebars',
fn: require("consolidate").handlebars
},
layout: 'layouts/layout',
partials: 'partials/'
};
将所有 .ebs 文件更新为 .handlebar 文件并更新其中的代码。
一切都会好起来的。
有一个视图生成器,用于以后的目的,它将为 Sails 生成默认视图(它将创建一个默认目录结构,其中包含默认文件)。
您可以在 github 存储库中找到它。(https://github.com/bhaskarmelkani/sails-generate-views-hbs)
它类似于 SailsJs 为翡翠官方推出的名为 balderdashy /sails-generate-views-jade 的。