[英]How to configure partials and layouts for Handlebars in Sails.js?
我运行Sails 0.9.7
并安装了Consolidate.js支持的Handlebars ,因此得到了Sails的支持
我可以从.handlebars
文件提供页面,它工作得很好。 我无法想象在哪里,在Sails工作流程中,以Sails的方式 ,我应该注册部分,帮助等...我更多的是寻找最佳实践,而不仅仅是一个有效的解决方案,但任何帮助将不胜感激。
我正在运行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>
我正在使用上面给出的答案,但我似乎已经使部分工作与风帆0.9.8没有黑客。
这就是我所拥有的。
Config / views.js =>引擎:“把手”
views / home / index.handlebars =>使用partial的主文件。
views / home / partials / partial.handlebars =>部分正在使用。
然后,只要你使用这样的东西,它就完美无缺。 res.view({partials:{partial:'partials / partial',footer:'partials / footer'}})
路径相对于默认调用的模板文件。 因此,如果你想为每个控制器使用不同的部分,你可以使用部分/如果你想要使用所有模板的全局部分,你可以使用../partials/
显然这完全是你自己,因为你需要在控制器中手动指定每个部分。
编辑:这很容易通过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同时保留一些相似布局的人来说已经足够了。
仅供参考,
如果您使用的是Sails 0.10或更高版本,我已经发布了一个NPM包来生成默认的车把视图, 网址为https://www.npmjs.org/package/sails-generate-views-handlebars
当使用'sails generate -template == handlebars'时没有额外的代码和基于路径的自动发现部分(也就是视图)时,还有一个用于sails-generate-backend的PR以便正确支持车把的布局和部分。 /部分/ **)
请参阅: 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)更改您的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'
如果我们使用.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文件并更新其中的代码。
一切都会好起来的。
有一个视图生成器 ,为了以后的目的,它将为Sails生成默认视图(它将创建一个默认的目录结构,其中包含默认文件)。
你可以在github存储库中找到它。( https://github.com/bhaskarmelkani/sails-generate-views-hbs )
它类似于SailsJs正式推出的名为balderdashy / sails -generate-views-jade的玉器 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.