Handlebars的安裝是比較簡單和方便的;handlebars是一個純JS庫,所以你能夠像使用其餘JS腳本同樣用script標籤來包含handlebars.jsjavascript
<script src="jquery.min.js"></script> <script type="text/javascript" src=".js/handlebars.js"></script>
將對象數據渲染到頁面上html
//用jquery獲取模板 var tpl = $("#tpl").html(); //預編譯模板 var template = Handlebars.compile(tpl); //模擬json數據 var context = { name: "XXX", content: "this is Handlebars"}; //匹配json內容 var aaa = template(context); //輸入模板 $("#wrap").html(aaa);
<script id="tpl" type="text/x-handlebars-template"> <div class="demo"> <h1>{{name}}</h1> <p>{{content}}</p> </div> </script>
有時候當你須要對某條表達式進行更深刻的操做時,Blocks就派上用場了,在Handlebars中,你能夠在表達式後面跟隨一個#號來表示Blocks,而後經過{{/表達式}}來結束Blocks。 若是當前的表達式是一個數組,則Handlebars會「自動展開數組」,並將Blocks的上下文設爲數組中的元素。java
<ul> {{#arr_data}} <li>{{language}}</li> {{/arr_data}} </ul>
如下爲json數據jquery
{ arr_data: [ {language: "hello"}, {language: "word"}, {language: "handlebars"} ] }
上面的代碼會自動匹配arr_data數據並展開數據json
Handlebars的if判斷只能判斷true和false,沒辦法進行這種a===10的邏輯判斷。segmentfault
#模板 {{#if isTrue}} <p>isTrue</p> {/if}} {{#if email}} <p>{{email}}</p> {{else}} <p>is not email</p> {{/if}} {{#if num}} <p>{{num}}</p> {{/if}} {{#if data1}} {{else}} <p>沒有這個字段</p> {{/if}} #json數據 { isTrue: true, email: '', num: '0' }; #頁面效果 isTrue is not email 0 沒有這個字段
說明:後端
{{#with}}通常狀況下,Handlebars模板會在編譯的階段的時候進行context傳遞和賦值。使用with的方法,咱們能夠將context轉移到數據的一個section裏面(若是你的數據包含section)。這個方法在操做複雜的template時候很是有用。【簡單的說就是,with能夠判斷這幾數據有沒有; 我的感受和if挺像的】數組
{{#with author}} 有author就顯示裏面的內容,沒有就不顯示 {{/with}}
Handlebar支持路徑訪問,Handlebar還支持嵌套的路徑,使得可以查找嵌套低於當前上下文的屬性
能夠經過.來訪問屬性也可使用../,來訪問父級屬性。 例如:(使用.訪問的例子)【常常搭配着with一塊兒用的】less
#模板 <h1>{{author.id}}</h1> #json { title: "this is title", author: { id: 47, name: "XXX" }, body: "this is body" }
遍歷能夠算是一個最經常使用的功能,對於不少數據的展現都是須要用到each的。Handlebar的遍歷對於數組和對象都適用。xss
#模板 {{#each this}} <p>{{this.name}}:{{this.age}}</p> {{else}} <p>no data</p> {{/each}} #json [ {name: 'aaa', age: 23 }, {name: 'bbb', age: 55 } ]
遍歷的一些小技巧
有時候,後臺傳來的一篇文章是富文本內容,而咱們想要將其轉換爲htnl輸出怎麼辦呢?「{{}}」輸出默認轉義Html,幾乎全部的模板引擎輸出默認都是轉義Html的,避免xss攻擊。若是你想避免轉義,請這樣用「{{{}}}」
#模板 <div>{{richText}}</div> <div>{{{richText}}}</div> #數據 var data = { richText: '<div>this is content</div>' };
#模板 <p>{{format time}}</p> #Helpers Handlebars.registerHelper('format', function (date, options) { return new Date(date).toLocaleString(); }); #數據 {"time":1450576000281}
#模板 {{#equal data1 data2}} <p>兩個數相等</p> {{else}} <p>不相等</p> {{/equal}} #js Handlebars.registerHelper("equal",function(v1,v2,options){ if(v1 == v2){ //知足添加繼續執行 return options.fn(this); }else{ //不知足條件執行{{else}}部分 return options.inverse(this); } });
#模板 <p>{{safe}}</p> #js Handlebars.registerHelper('safe', function () { return new Handlebars.SafeString('<div>safe string</div>') });
Handlebars也可使用註釋寫法以下
{{! 單行註釋 }} {{!-- 多行註釋 --}}
共享同一個模板內容,有些公共部分但願一次書寫,而後就能重複使用了;相似一些include的功能; 不須要也能調用Helper的方法
#模板 <p>{{> footer}}</p> #Helper Handlebars.registerPartial('footer', function () { return new Handlebars.SafeString('<div>This is footer</div>') });
Handlebars官網的不少內置的helper以及功能能夠參考看一下Handlebars官網,入門有時候仍是容易的,可是深刻學習須要的時間和經驗。