Vue深入解析-Mustache

Vue本身是一款非常優(yōu)秀的前端框架,通過簡潔的API提供高效的數(shù)據(jù)綁定和靈活的組件系統(tǒng),其核心思想是 “數(shù)據(jù)驅(qū)動的組件系統(tǒng)”。Vue在進行進行插值處理和 綁定表達式時使用了一種叫Mustache模版引擎。
Mustache是常見的Web模板引擎中的一種,這些年隨著前端的不斷發(fā)展,基于javascript的模版引擎越來越多。目前流行有 Mustache、Hogan、doT.js、JsRender、Kendo UI Templates等。

一、Mustache 簡介

Mustache是一個logic-less(輕邏輯)模板解析引擎,它的優(yōu)勢在于可以應(yīng)用在Javascript、PHP、Python、Perl等多種編程語言中。

二、Mustache 語法:

Mustache 的模板語法很簡單,就那么幾個:

  • {{keyName}}
  • {{#keyName}} {{/keyName}}
  • {{^keyName}} {{/keyName}}
  • {{.}}
  • {{<partials}}
  • {{{keyName}}}
  • {{!comments}}
    這里將以 javascript 應(yīng)用為例進行介紹,先來看個 Demo:

...
<script type="text/javascript" src="mustache.js"></script> <script type="text/javascript">
var data = {
"company": "Apple",
"address": {
"street": "1 Infinite Loop Cupertino</br>",
"city": "California ",
"state": "CA ",
"zip": "95014 "
},
"product": ["Macbook ","iPhone ","iPod ","iPad "]
}
var tpl = '<h1> Hello {{company}}</h1> ';
var html = Mustache.render(tpl, data);
console.log( html )
</script>
...
//運行后 Console 輸出:
<h1>Hello Apple</h1>

在 Demo 中可以看到 data 是數(shù)據(jù),tpl 是定義的模板,Mustache.render(tpl, data)方法是用于渲染輸出最終的 HTML 代碼。
借助 Demo 來對語法做簡單的介紹:

{{keyName}}

{{}}就是 Mustache 的標(biāo)示符,花括號里的 keyName 表示鍵名,這句的作用是直接輸出與鍵名匹配的鍵值,例如:

var tpl = '{{company}}';
var html = Mustache.render(tpl, data);
//輸出:
Apple

{{#keyName}} {{/keyName}}

以#開始、以/結(jié)束表示區(qū)塊,它會根據(jù)當(dāng)前上下文中的鍵值來對區(qū)塊進行一次或多次渲染,例如改寫下 Demo 中的 tpl:

var tpl = '{{#address}} <p>{{street}},{{city}},{{state}}</p> {{/address}}';
var html = Mustache.render(tpl, data);
//輸出:
<p>1 Infinite Loop Cupertino</br>,California,CA</p>

注意:如果{{#keyName}} {{/keyName}}中的 keyName 值為 null, undefined, false;則不渲染輸出任何內(nèi)容。

{{^keyName}} {{/keyName}}

該語法與{{#keyName}} {{/keyName}}類似,不同在于它是當(dāng) keyName 值為 null, undefined, false 時才渲染輸出該區(qū)塊內(nèi)容。

var tpl = {{^nothing}}沒找到 nothing 鍵名就會渲染這{{/nothing}};
var html = Mustache.render(tpl, data);
//輸出:
沒找到 nothing 鍵名就會渲染這段

{{.}}

{{.}}表示枚舉,可以循環(huán)輸出整個數(shù)組,例如:
var tpl = '{{#product}} <p>{{.}}</p> {{/product}}';
var html = Mustache.render(tpl, data);
//輸出:
<p>Macbook </p>
<p>iPhone </p>
<p>iPod </p>
<p>iPad </p>

{{>partials}}

以>開始表示子模塊,如{{> address}};當(dāng)結(jié)構(gòu)比較復(fù)雜時,我們可以使用該語法將復(fù)雜的結(jié)構(gòu)拆分成幾個小的子模塊,例如:

var tpl = "<h1>{{company}}</h1> <ul>{{>address}}</ul>";
var partials = {address: "{{#address}}<li>{{street}}</li><li>{{city}}</li><li>{{state}}</li><li>{{zip}}</li>{{/address}}"};
var html = Mustache.render(tpl, data, partials);

//輸出:
<h1>Apple</h1>
<ul>
<li>1 Infinite Loop Cupertino</br></li>
<li>California</li>
<li>CA</li>
<li>95014</li>
</ul>

{{{keyName}}}

{{keyName}}輸出會將等特殊字符轉(zhuǎn)譯,如果想保持內(nèi)容原樣輸出可以使用{{{}}},例如:

var tpl = '{{#address}} <p>{{{street}}}</p> {{/address}}'
//輸出:
<p>1 Infinite Loop Cupertino</br></p>

{{!comments}}

!表示注釋,注釋后不會渲染輸出任何內(nèi)容。

{{!這里是注釋}}
//輸出:

從上面的Api可以看出Mustache模板引擎在設(shè)計上還是比較簡單的,同時并沒有類似if-else這種重邏輯式的編碼,一切都是用標(biāo)簽來解決.Vue在數(shù)據(jù)插值和表達式綁定上都用了Mustache語法,下一章我們會就這部分的內(nèi)容詳細介紹下.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容