Handlebar是javascript的引擎模板,經過對view和data的分離來快速的構建web模板。使用handlebar模塊能夠在加載時被預編譯,而不是等客戶端執行到某段代碼時候,再進行編譯。這就能夠保證模塊加載和運行的速度。
注意:
{{{}}} -->不會進行編碼轉換,直接進行替換,即這裏寫html標籤,也會將標籤輸出。
{{}} -->會作html編碼轉換。
handlerbar是有層級轉換的
例子:javascript
{{#post}} {{#if author.length}} <h3>{{title}}</h3> <ul> {{#each author}} <li>{{../title}}'s author is {{name}}</li> {{/each}} </ul> {{/if}} {{/post}}
handlebar中兩個重要的文件:layouts和partialshtml
layout.hb屬於佈局文件,全部跳轉頁面都會經過這個文件來渲染頁面內容。在這個文件中,能夠寫全部頁面都會引用的內容。
例如:java
<meta name="format-detection" content="telephone=no,email=no,address=no"/>
在可能須要動態渲染的位置,加上
{{#block "body"}}
{{/block}}
等內容。web
用來存放公共引用的。如導航頭,底部。
在動態page文件中的,引用方法爲{{ > head.hb}} (head.hb是partials中對應的文件名)緩存
主要功能:在頁面上預設一個位置,動態的渲染這個位置的代碼。
咱們引用的helper,有內置的if,each,unless,with等。若想實現複雜的判斷邏輯,須要本身定義helper。
可是過多複雜的邏輯,就模糊了模板的專一點,違背了本來的數據和表現分離的出發點。
模板-----應專一於數據綁定
數據層---應專一於作邏輯的預處理,並將結果返回給模板。app
注意:
模板引擎會緩存已編譯的模板,只有模板發生改變,纔會從新編譯和從新緩存。
app.set('view cache',true);less