2013-11-21 55 views
3

我使用Grunt和Assemble在我的網站上創建預編譯模板,但我需要根據存儲在客戶端存儲中的信息動態創建一些部分。有沒有辦法免除預編譯模板的各個部分?使用匯編混合動態/預編譯的句柄模板

+1

我認爲這可能需要一個針對handlebars和使用助手的解決方案。如果您找到解決方案,請發佈。我會看看我們的手柄是否有任何東西 - 助手lib可能會有所幫助。 – doowb

回答

9

我們不能做自定義分隔符(Handlebars的缺點),但有一些解決方案可能適用於您。這兩者都不一定是慣用的,所以你要判斷這些對你正在進行的項目來說是多麼合適。

字符串替換

你可以使用一些自定義(臨時)分隔符不應該被編譯在內容模板,然後創建一個塊助手將在那些分隔符轉換回有效車把表達式編譯時間(我測試了這此答案和它的作品):

例如:

Handlebars.registerHelper("raw", function(options) { 
    return options.fn(this).replace(/\[\[/g, '{{').replace(/\]\]/g, '}}'); 
}); 

然後使用它像這樣:

{{#raw}} 
    {{> foo }} 
{{/raw}} 

裏面foo.hbs,你可能有這樣的事情:

<title>[[title]]</title> 

,它會渲染到:

<title>{{title}}</title> 

該解決方案是哈克肯定的,如果你可能有問題你會在包含的內容中嵌入任何代碼示例,並且其中一個示例恰好具有該語法(如[0,1,[foo, bar]]

逃逸

這個解決方案是最有可能是更好的方式去。把手不會評估任何之前有\的模板。所以,你可以這樣做:

<title>\{{title}}</title> 

,它會渲染到:

<title>{{title}}</title> 

第一個建議可能是不值得增加,但是,嘿,你永遠不知道對不對?

+2

這很好。只需按照http://assemble.io/docs/Custom-Helpers.html和http://assemble.io/docs/options-helpers.html安裝Assemble的助手。謝謝。 – eloone

+0

\ {{title}}做了詭計;)感謝隊友 – DominikAngerer