2012-12-14 176 views
4

我在我的服務器端節點應用程序中使用Express + Handlebars,並且我想將客戶端模板作爲要呈現的頁面的一部分發送到瀏覽器。有沒有辦法忽略Handlebars模板中的Handlebars模板?

的index.html

<html> 
<head> 
    <title>{{title}}</title> 
</head> 
<body> 
    <div> 
    {{stuff}}  
    </div> 
    <script id="more-template" type="text/x-handlebars-template"> 
    <div>{{more}}</div> 
    </script> 
</body> 

不幸的是,車把試圖呈現在#更多模板腳本塊的東西。因爲它的服務器模板的上下文不確定的(這只是刪除了{{more}}

有沒有一種方法可以讓我得到它忽略script標籤裏面的東西?(以便客戶端模板可以使用它)

我已經看到了這個問題:Node.js with Handlebars.js on server and client,我寧願只使用1個模板引擎

回答

5

所以我沒有找到一個方法來容易忽視客戶端模板,但普遍的共識是預編譯你的客戶端模板。

  1. 安裝把手全球npm install handlebars -g
  2. 預編譯模板handlebars client-template1.handlebars -f templates.js
  3. 包括templates.js <script src="templates.js"></script>
  4. 執行模板var html = Handlebars.templates["client-template1"](context);

額外的信息
Using pre-compiled templates with Handlebars.js (jQuery Mobile environment)
http://handlebarsjs.com/precompilation.html

+2

現在更容易:https://npmjs.org/package/grunt-contrib-handlebars – slf

+0

正是我在找什麼。在雜耍了很多地方之後,我發現這是我的東西最簡單和最好的工作解決方案。 – dhruvpatel

5

一般情況下,當您的模板被編譯兩次(例如,當你只有服務器端),並要忽略模板標籤在第一次運行,你可以簡單地告訴車把通過附加一個反斜槓忽略它們:

{{variable1}} \{{variable2}} 

variable1集編譯成value1variable2是undefined,您將獲得:

value1 {{variable2}} 

(而不是將第二個標記替換爲空字符串)。

當編譯與variable2設置爲value2第二輪,你會得到:

value1 value2 

不是完美的解決方案(這將是車把獨自離開不確定變量的設置),但對我的特殊情況下工作。

+0

這對{{#if}}塊有效嗎?謝謝! – Dakine83