簡體   English   中英

如何在Sails.js中配置Handlebars的部分和布局?

[英]How to configure partials and layouts for Handlebars in Sails.js?

我運行Sails 0.9.7並安裝了Consolidate.js支持的Handlebars ,因此得到了Sails的支持

我可以從.handlebars文件提供頁面,它工作得很好。 我無法想象在哪里,在Sails工作流程中,以Sails的方式 ,我應該注冊部分,幫助等...我更多的是尋找最佳實踐,而不僅僅是一個有效的解決方案,但任何幫助將不勝感激。

我正在運行v0.10測試版,但這不應該影響我在下面的工作方式:

  1. 發動機應該是預期的車把
  2. 路由需要明確定義控制器和操作。 設置視圖不起作用。 (除非有一種方法我無法弄清楚在路徑文件中設置部分)
  3. 控制器需要將部分定義為相對於視圖的路徑。

配置/ 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>

OUTPUT

<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 -t​​emplate == 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM