摘要:簡(jiǎn)介是一個(gè)輕邏輯模板解析引擎,它的優(yōu)勢(shì)在于可以應(yīng)用在等多種編程語(yǔ)言中。這里主要是看中的應(yīng)用。
mustache簡(jiǎn)介
Mustache 是一個(gè) logic-less (輕邏輯)模板解析引擎,它的優(yōu)勢(shì)在于可以應(yīng)用在 Javascript、PHP、Python、Perl 等多種編程語(yǔ)言中。這里主要是看JavaScript中的應(yīng)用。Javascript 語(yǔ)言的模板引擎,目前流行有 Mustache、Hogan、doT.js、JsRender、Kendo UI Templates等,
Mustache 的模板語(yǔ)法很簡(jiǎn)單,就那么幾個(gè): {{keyName}} {{#keyName}} {{/keyName}} {{^keyName}} {{/keyName}} {{.}} {{下面看看mustache.js的使用,github地址: https://github.com/janl/musta...
使用方法這里看看快速使用:
var view = { title: "Joe", calc: function () { return 2 + 4; } }; var output = Mustache.render("{{title}} spends {{calc}}
", view);這個(gè)直觀的認(rèn)識(shí)就是:寫(xiě)一段字符串,可以是和html文檔一樣的字符串模板,然后按照mustache的書(shū)寫(xiě)規(guī)則將需要處理的數(shù)據(jù)對(duì)象通過(guò)渲染方法注入,形成一個(gè)需要的html文本,就可以是使用innerHTML或者$.html之類(lèi)的方法放到頁(yè)面中。
變量mustache的模板就是一段字符串,里面編寫(xiě)了任意多的mustache tags,都是使用 {{key}} 來(lái)進(jìn)行占位,如果渲染數(shù)據(jù)沒(méi)有對(duì)應(yīng)的數(shù)據(jù)就會(huì)渲染為空,需要注意的是{{}}這樣書(shū)寫(xiě)是不會(huì)html轉(zhuǎn)譯的,渲染數(shù)據(jù)里面書(shū)寫(xiě)的html標(biāo)簽會(huì)被轉(zhuǎn)化為實(shí)體,可以使用{{{}}}或者{{&name}},如果不想{{}}被mustache解析渲染的話可以使用 {{=<% %>=}} {{key}} <%={{ }}=%> 將忽略出包起來(lái)。
View: { "name": "Chris", "company": "GitHub" } Template: * {{name}} //* Chris * {{age}} //* * {{company}} //* GitHub * {{{company}}} //* GitHub * {{&company}} //* GitHub {{=<% %>=}} * {{company}} //* {{company}} <%={{ }}=%>JavaScript"s dot notation may be used to access keys that are properties of objects in a view.
View: { "name": { "first": "Michael", "last": "Jackson" }, "age": "RIP" } Template: * {{name.first}} {{name.last}} * {{age}} Output: * Michael Jackson * RIP區(qū)塊區(qū)塊內(nèi)的部分可能會(huì)被渲染一次或者多次,根據(jù)模板中的具體展示,區(qū)塊同樣是使用兩個(gè)tag標(biāo)志起始和結(jié)束,{{#key}} {{/key}}
If the person key does not exist, or exists and has a value of null, undefined, false, 0, or NaN, or is an empty string or an empty list, the block will not be rendered.
也就是說(shuō)如果如果塊區(qū)的值對(duì)應(yīng)的是null、undefined、false、0、NaN、空字符串、空數(shù)組,這個(gè)塊區(qū)是不會(huì)渲染的,如果是數(shù)組就會(huì)如下:View: { "stooges": [ { "name": "Moe" }, { "name": "Larry" }, { "name": "Curly" } ] } Template: {{#stooges}} //Moe {{name}} //Larry {{/stooges}} //Curly如果塊區(qū)是要展示一個(gè)字符串?dāng)?shù)組,可以考慮使用{{.}}來(lái)完成循環(huán)渲染,
{{#musketeers}} * {{.}} {{/musketeers}}塊區(qū)甚至可以直接使用function來(lái)進(jìn)行數(shù)據(jù)的處理
View: { "beatles": [ { "firstName": "John", "lastName": "Lennon" }, { "firstName": "Paul", "lastName": "McCartney" }, { "firstName": "George", "lastName": "Harrison" }, { "firstName": "Ringo", "lastName": "Starr" } ], "name": function () { return this.firstName + " " + this.lastName; } } Template: {{#beatles}} * {{name}} {{/beatles}} Output: * John Lennon * Paul McCartney * George Harrison * Ringo Starr還有塊區(qū)的key直接就是function的時(shí)候,這個(gè)看起來(lái)好高級(jí),我也沒(méi)太明白,一般不會(huì)這么寫(xiě)吧。
If the value of a section key is a function, it is called with the section"s literal block of text, un-rendered, as its first argument. The second argument is a special rendering function that uses the current view as its view argument. It is called in the context of the current view object. View: { "name": "Tater", "bold": function () { return function (text, render) { return "" + render(text) + ""; } } } Template: {{#bold}}Hi {{name}}.{{/bold}} Output: Hi Tater.反轉(zhuǎn)塊區(qū)這個(gè)和塊區(qū)更像是一個(gè)組合,對(duì)應(yīng) if else這種情況,塊區(qū)實(shí)在key有內(nèi)容的時(shí)候來(lái)進(jìn)行渲染,反轉(zhuǎn)塊區(qū)恰恰相反,在沒(méi)有內(nèi)容的時(shí)候來(lái)進(jìn)行渲染,這也很符合web開(kāi)發(fā)的情景,
View: { "repos": [] } Template: {{#repos}}{{name}}{{/repos}} {{^repos}}No repos :({{/repos}} Output: No repos :(其他 注釋、子模塊Comments begin with a bang and are ignored. The following template:
Today{{! ignore me }}.
Will render as follows:
Today.
{{!comment}} 這就是注釋了子模塊就是當(dāng)渲染的數(shù)據(jù)比較的復(fù)雜的時(shí)候就可以考慮使用分割來(lái)進(jìn)行部分一快一塊的渲染,{{> block}}
這里需要注意渲染調(diào)用的方法和之前不一樣了,需要最后帶上block這個(gè)區(qū)塊的渲染內(nèi)容For example, this template and partial: base.mustache:Names
{{#names}} {{> user}} {{/names}} user.mustache: {{name}} Can be thought of as a single, expanded template:Names
{{#names}} {{name}} {{/names}} In mustache.js an object of partials may be passed as the third argument to Mustache.render. The object should be keyed by the name of the partial, and its value should be the partial text. Mustache.render(template, view, { user: userTemplate });參考:https://github.com/janl/musta...
http://www.iinterest.net/2012...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/83030.html
摘要:是一個(gè)有著完善和驚艷特性的模板引擎。是一個(gè)強(qiáng)大的客戶端模板引擎,用來(lái)將數(shù)據(jù)綁定到頁(yè)面的結(jié)構(gòu)中。一套同時(shí)可用于瀏覽器或的異步模板引擎。是一套富功能的模板引擎。本文鏈接個(gè)最好的模板引擎來(lái)源編譯含內(nèi)容擴(kuò)充責(zé)任沙渺 JavaScript隨著各種神奇的實(shí)用功能庫(kù)日漸豐富,而越來(lái)越受到Web開(kāi)發(fā)者與設(shè)計(jì)師的追捧,例如:jQuery, MooTools, Prototype等。 使用JavaScr...
摘要:使用方法編譯模板并根據(jù)所給的數(shù)據(jù)立即渲染出結(jié)果僅編譯模版暫不渲染,它會(huì)返回一個(gè)可重用的編譯后的函數(shù)根據(jù)給定的數(shù)據(jù),對(duì)之前編譯好的模板進(jìn)行數(shù)據(jù)渲染參考資料模板引擎概述 js模版引擎介紹 JavaScript 模板是將 HTML 結(jié)構(gòu)從包含它們的內(nèi)容中分離的方法。模板系統(tǒng)通常會(huì)引入一些新語(yǔ)法,但通常是非常簡(jiǎn)單的,一個(gè)要注意的有趣的點(diǎn)是,替換標(biāo)記通常是由雙花括號(hào)({ {……} })表示,這也...
摘要:大多數(shù)模板實(shí)現(xiàn)原理基本一致模板字符串首先通過(guò)各種手段剝離出普通字符串和模板語(yǔ)法字符串生成抽象語(yǔ)法樹(shù)然后針對(duì)模板語(yǔ)法片段進(jìn)行編譯,期間模板變量均去引擎輸入的變量中查找模板語(yǔ)法片段生成出普通片段,與原始普通字符串進(jìn)行拼接輸出。 前端模板的發(fā)展 模板可以說(shuō)是前端開(kāi)發(fā)最常接觸的工具之一。將頁(yè)面固定不變的內(nèi)容抽出成模板,服務(wù)端返回的動(dòng)態(tài)數(shù)據(jù)裝填到模板中預(yù)留的坑位,最后組裝成完整的頁(yè)面html字符...
摘要:注意,這里目前沒(méi)有引入,不管第幾次渲染都是無(wú)腦設(shè)置,復(fù)雜結(jié)構(gòu)對(duì)瀏覽器的開(kāi)銷(xiāo)很大,這里后續(xù)會(huì)引入。整合這里把給直接暴露在下,因?yàn)槊總€(gè)組件都生成了唯一的,后續(xù)實(shí)現(xiàn)事件作用域以及對(duì)象實(shí)例獲取都要通過(guò)下的獲取。 Hello Omi Omi框架的每個(gè)組件都繼承自O(shè)mi.Component,本篇會(huì)去完成Omi的Component的基本錐形,讓其能夠渲染第一個(gè)組件。 omi.js實(shí)現(xiàn) var Omi...
閱讀 2617·2021-11-16 11:40
閱讀 3412·2021-11-08 13:26
閱讀 877·2021-10-28 09:32
閱讀 3534·2021-09-13 10:26
閱讀 809·2019-08-30 15:55
閱讀 783·2019-08-30 15:44
閱讀 1912·2019-08-30 15:44
閱讀 1758·2019-08-30 13:48