摘要:簡介是一個輕邏輯模板解析引擎,它的優(yōu)勢在于可以應用在等多種編程語言中。這里主要是看中的應用。
mustache簡介
Mustache 是一個 logic-less (輕邏輯)模板解析引擎,它的優(yōu)勢在于可以應用在 Javascript、PHP、Python、Perl 等多種編程語言中。這里主要是看JavaScript中的應用。Javascript 語言的模板引擎,目前流行有 Mustache、Hogan、doT.js、JsRender、Kendo UI Templates等,
Mustache 的模板語法很簡單,就那么幾個: {{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);這個直觀的認識就是:寫一段字符串,可以是和html文檔一樣的字符串模板,然后按照mustache的書寫規(guī)則將需要處理的數(shù)據(jù)對象通過渲染方法注入,形成一個需要的html文本,就可以是使用innerHTML或者$.html之類的方法放到頁面中。
變量mustache的模板就是一段字符串,里面編寫了任意多的mustache tags,都是使用 {{key}} 來進行占位,如果渲染數(shù)據(jù)沒有對應的數(shù)據(jù)就會渲染為空,需要注意的是{{}}這樣書寫是不會html轉(zhuǎn)譯的,渲染數(shù)據(jù)里面書寫的html標簽會被轉(zhuǎn)化為實體,可以使用{{{}}}或者{{&name}},如果不想{{}}被mustache解析渲染的話可以使用 {{=<% %>=}} {{key}} <%={{ }}=%> 將忽略出包起來。
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)的部分可能會被渲染一次或者多次,根據(jù)模板中的具體展示,區(qū)塊同樣是使用兩個tag標志起始和結(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.
也就是說如果如果塊區(qū)的值對應的是null、undefined、false、0、NaN、空字符串、空數(shù)組,這個塊區(qū)是不會渲染的,如果是數(shù)組就會如下:View: { "stooges": [ { "name": "Moe" }, { "name": "Larry" }, { "name": "Curly" } ] } Template: {{#stooges}} //Moe {{name}} //Larry {{/stooges}} //Curly如果塊區(qū)是要展示一個字符串數(shù)組,可以考慮使用{{.}}來完成循環(huán)渲染,
{{#musketeers}} * {{.}} {{/musketeers}}塊區(qū)甚至可以直接使用function來進行數(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的時候,這個看起來好高級,我也沒太明白,一般不會這么寫吧。
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ū)這個和塊區(qū)更像是一個組合,對應 if else這種情況,塊區(qū)實在key有內(nèi)容的時候來進行渲染,反轉(zhuǎn)塊區(qū)恰恰相反,在沒有內(nèi)容的時候來進行渲染,這也很符合web開發(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}} 這就是注釋了子模塊就是當渲染的數(shù)據(jù)比較的復雜的時候就可以考慮使用分割來進行部分一快一塊的渲染,{{> block}}
這里需要注意渲染調(diào)用的方法和之前不一樣了,需要最后帶上block這個區(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/83030.html
摘要:是一個有著完善和驚艷特性的模板引擎。是一個強大的客戶端模板引擎,用來將數(shù)據(jù)綁定到頁面的結(jié)構(gòu)中。一套同時可用于瀏覽器或的異步模板引擎。是一套富功能的模板引擎。本文鏈接個最好的模板引擎來源編譯含內(nèi)容擴充責任沙渺 JavaScript隨著各種神奇的實用功能庫日漸豐富,而越來越受到Web開發(fā)者與設計師的追捧,例如:jQuery, MooTools, Prototype等。 使用JavaScr...
摘要:使用方法編譯模板并根據(jù)所給的數(shù)據(jù)立即渲染出結(jié)果僅編譯模版暫不渲染,它會返回一個可重用的編譯后的函數(shù)根據(jù)給定的數(shù)據(jù),對之前編譯好的模板進行數(shù)據(jù)渲染參考資料模板引擎概述 js模版引擎介紹 JavaScript 模板是將 HTML 結(jié)構(gòu)從包含它們的內(nèi)容中分離的方法。模板系統(tǒng)通常會引入一些新語法,但通常是非常簡單的,一個要注意的有趣的點是,替換標記通常是由雙花括號({ {……} })表示,這也...
摘要:大多數(shù)模板實現(xiàn)原理基本一致模板字符串首先通過各種手段剝離出普通字符串和模板語法字符串生成抽象語法樹然后針對模板語法片段進行編譯,期間模板變量均去引擎輸入的變量中查找模板語法片段生成出普通片段,與原始普通字符串進行拼接輸出。 前端模板的發(fā)展 模板可以說是前端開發(fā)最常接觸的工具之一。將頁面固定不變的內(nèi)容抽出成模板,服務端返回的動態(tài)數(shù)據(jù)裝填到模板中預留的坑位,最后組裝成完整的頁面html字符...
摘要:注意,這里目前沒有引入,不管第幾次渲染都是無腦設置,復雜結(jié)構(gòu)對瀏覽器的開銷很大,這里后續(xù)會引入。整合這里把給直接暴露在下,因為每個組件都生成了唯一的,后續(xù)實現(xiàn)事件作用域以及對象實例獲取都要通過下的獲取。 Hello Omi Omi框架的每個組件都繼承自Omi.Component,本篇會去完成Omi的Component的基本錐形,讓其能夠渲染第一個組件。 omi.js實現(xiàn) var Omi...
閱讀 2621·2021-11-16 11:40
閱讀 3417·2021-11-08 13:26
閱讀 886·2021-10-28 09:32
閱讀 3542·2021-09-13 10:26
閱讀 815·2019-08-30 15:55
閱讀 788·2019-08-30 15:44
閱讀 1917·2019-08-30 15:44
閱讀 1762·2019-08-30 13:48