[英]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.