我运行Sails 0.9.7
并安装了Handlebars支持的Consolidate.js,因此supported by Sails
我可以提供来自.handlebars
文件的网页,它运行得很好。
我无法确定在哪里,在Sails工作流程中,以及 Sails方式,我应该注册部分,帮助等...我更多地寻找最佳实践,而不仅仅是工作解决方案但任何帮助将不胜感激。
答案 0 :(得分:8)
我正在运行v0.10测试版,但这不应该影响我在下面的工作方式:
<强>配置/ views.js 强>
module.exports.views = {
engine : 'handlebars',
layout : false
};
<强>配置/ routes.js 强>
'/': {
controller: 'site',
action: 'index'
},
<强> SiteController.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>
答案 1 :(得分:4)
我正在使用上面给出的答案,但我似乎已经使部分工作与风帆0.9.8没有黑客。
这就是我所拥有的。
Config / views.js =&gt; 发动机:“车把”
views / home / index.handlebars =&gt;使用partial的主文件。
views / home / partials / partial.handlebars =&gt;部分被使用。
然后只要你使用这样的东西,它就能完美地运作。 res.view({ 部分:{ partial:'partials / partial', 页脚:'partials / footer' } })
路径相对于默认调用的模板文件。因此,如果你想要每个控制器不同的部分,你使用部分/ 如果你想要所有模板的全局部分,你可以使用../ partials /
显然这完全是你的,因为你需要在控制器中手动指定每个部分。
答案 2 :(得分:2)
编辑:这很容易通过express3-handlebars模块实现,同时不更改任何默认的Sails功能,除了要求您将布局文件移动到views/layouts
。如果你想查看,我在这里打开了一个拉取请求(https://github.com/balderdashy/sails/pull/1075)。
在对sails源代码进行一些挖掘之后,在渲染视图时引入部分内容相当容易。
当您在控制器操作中调用res.view
时,只需传入一个partials对象作为“locals”的一部分,其中包含您要渲染的部分列表。
// 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同时保留一些相似的布局的人来说已经足够了。
答案 3 :(得分:2)
FYI,
如果您使用的是Sails 0.10或更高版本,我已发布了一个NPM包,可在https://www.npmjs.org/package/sails-generate-views-handlebars生成默认句柄视图
当使用'sails generate -template == handlebars'而没有额外的代码并基于路径自动发现部分时,还有一个为sails-generate-backend提出的PR以便正确支持车把的布局和部分( aka。views / partial / **)
请参阅:https://github.com/balderdashy/sails-generate-backend/pull/9
答案 4 :(得分:1)
我已经没时间了,但我想接近答案。当我得到更多详细信息时,我会更新此回复,但是如果您想查看它,请查看包含的consolidate.js文件中的第501行。在github上查看:https://github.com/balderdashy/sails/blob/master/lib/configuration/consolidate.js#L501
对于Handlebars来说,有一个for循环可以记录来自options.partials的部分内容。
这不是一个非常令人满意的解决方案,但是如果你把你的部分内容推到那个选项对象上,那么也许它会从中拉出来。
我接下来的一个重要问题是,什么是选项对象,以及它在何处设置?
答案 5 :(得分:0)
要在帆js中配置把手模板,请按照以下步骤操作:
1)在应用程序的node_modules文件夹中安装把手:
npm install handlebars
2)更改你的config / 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'
答案 6 :(得分:0)
如果我们使用.handlebars扩展名来代替.hbs,Sails本身支持把手及其(多布局,局部)。
因此,为了在Sails而不是EJS中使用把手,建议使用合并(它是模板引擎安慰库)。把手适用于 SailsJs +合并。
您需要安装合并。
npm install consolidate --save
然后您只需使用以下内容更新 config / views.js 文件。
module.exports.views = {
engine: {
ext: 'handlebars',
fn: require("consolidate").handlebars
},
layout: 'layouts/layout',
partials: 'partials/'
};
将所有.ebs文件更新为.handlebar文件并更新其中的代码。
一切都会好起来的。
有一个 view-generator ,为了以后的目的,它将为Sails生成默认视图(它将创建一个默认目录结构,其中包含默认文件)。
您可以在github存储库中找到它。(https://github.com/bhaskarmelkani/sails-generate-views-hbs)
它类似于SailsJs正式推出的名为 balderdashy / sails-generate-views-jade 的玉器。