天天看點

Web模闆引擎——Mustache一、Mustache 簡介:二、Mustache 文法:

目錄

一、Mustache 簡介:

二、Mustache 文法:

原文位址:http://www.iinterest.net/2012/09/12/web-template-engine-mustache/ 

Web 模闆引擎是為了使使用者界面與業務資料(内容)分離而産生的,它可以生成特定格式的文檔,通常是标準的 HTML 文檔。當然不同的開發語言有不同模闆引擎,如 Javascript 下的 Hogan 、ASP 下的 aspTemplate、以及 PHP 下的 Smarty,這裡主要介紹基于 Javascript 語言的模闆引擎,目前流行的有 Mustache、Hogan、doT.js、JsRender、Kendo UI Templates等,jsperf.com 上可以看到它們的性能對比,首先先介紹下 Mustache。  

一、Mustache 簡介:

Mustache 是一個 logic-less (輕邏輯)模闆解析引擎,它的優勢在于可以應用在 Javascript、PHP、Python、Perl 等多種程式設計語言中。

二、Mustache 文法:

Mustache 的模闆文法很簡單,就那麼幾個:

{{keyName}}
{{#keyName}} {{/keyName}}
{{^keyName}} {{/keyName}}
{{.}}
{{<partials}}
{{{keyName}}}
{{!comments}}
           

這裡将以 javascript 應用為例進行介紹,先來看個 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 是資料,tpl 是定義的模闆,Mustache.render(tpl, data)方法是用于渲染輸出最終的 HTML 代碼。

借助 Demo 來對文法做簡單的介紹:

{{keyName}}

{{}}就是 Mustache 的标示符,花括号裡的 keyName 表示鍵名,這句的作用是直接輸出與鍵名比對的鍵值,例如: 

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

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

以#開始、以/結束表示區塊,它會根據目前上下文中的鍵值來對區塊進行一次或多次渲染,例如改寫下 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;則不渲染輸出任何内容。 

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

該文法與{{#keyName}} {{/keyName}}類似,不同在于它是當 keyName 值為 null, undefined, false 時才渲染輸出該區塊内容。 

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

{{.}}

{{.}}表示枚舉,可以循環輸出整個數組,例如:

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}};當結構比較複雜時,我們可以使用該文法将複雜的結構拆分成幾個小的子子產品,例如:

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}}輸出會将特殊字元轉譯,如果想保持内容原樣輸出可以使用{{{}}},例如:

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

{{!comments}}

!表示注釋,注釋後不會渲染輸出任何内容。 

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

繼續閱讀