Mustache(英文本意:触须,胡须)是基于JavaScript实现的模版引擎,类似于JQuery Template,但是这个模版更加的轻量级,语法更加的简单易用,很容易上手。

下载:https://github.com/janl/mustache.js

mustache主要特点是logic less Templates 意思说,模版中无逻辑或者说很少逻辑。

mustache template is a string that contains any number of mustache tags. Tags are indicated by the double mustaches that surround them. {{person}} is a tag, as is {{#person}}. In both examples we refer to person as the tag's key. There are several types of tags available in mustache.js, described below.

There are several techniques that can be used to load templates and hand them to mustache.js, here are two of them:

Include Templates

If you need a template for a dynamic part in a static website, you can consider including the template in the static HTML file to avoid loading templates separately. Here's a small example using jQuery:

  1. <html>
  2. <body onload="loadUser">
  3. <div id="target">Loading...</div>
  4. <script id="template" type="x-tmpl-mustache">
  5. Hello {{ name }}!
  6. </script>
  7. </body>
  8. </html>
  1. function loadUser() {
  2. var template = $('#template').html();
  3. Mustache.parse(template); // optional, speeds up future uses
  4. var rendered = Mustache.render(template, {name: "Luke"});
  5. $('#target').html(rendered);
  6. }

Load External Templates

If your templates reside in individual files, you can load them asynchronously and render them when they arrive. Another example using jQuery:

  1. function loadUser() {
  2. $.get('template.mst', function(template) {
  3. var rendered = Mustache.render(template, {name: "Luke"});
  4. $('#target').html(rendered);
  5. });
  6. }
  7.  
  8. 简单的对象绑定:
  1. $(function () {
  2. var user = { name: "Olive", age: 23, sex: "girl" };
  3. var template = "My name is {{name}} ,I'm {{age}} ,Sex is {{sex}}";
  4. var view = Mustache.render(template, user);
  5. $("#user_info").html(view);

l  页面呈现效果:

l  语法解释:

i.              Mustache的语法很简单,用两个大括号标记要绑定的字段即可,“{{}}”;

ii.              大括号内的字段名称要和Mustache.render方法中的第二个参数中的对象的属性名一致

iii.              主要的渲染方法为Mustache.render,该方法有两个参数,第一个为要渲染的模版,也就是上例中的template,第二个就是数据源也就是上例中的user对象

.如果是对象,还能解释其属性

  1. var data = {
  2. "name" : {
  3. "first" : "Chen",
  4. "last" : "Jackson"
  5. },
  6. "age" : 18
  7. };
  8. var output = Mustache.render(
  9. "name:{{name.first}} {{name.last}},age:{{age}}", data);
  10. console.log(output);
  1. 结果:name:Chen Jackson,age:18

对象数组循环渲染展示

  1. var users = { result: [{ name: "Only", age: 24, sex: "boy" },
  2. { name: "for", age: 24, sex: "boy" },
  3. { name: "Olive", age: 23, sex: "girl" }
  4. ]
  5. };
  6. var template = "<div><table cellpadding=0 cellspacing=0 class='tb' ><tr><td>Name</td><td>Age</td><td>Sex</td></tr>{{#result}}<tr><td>{{name}}</td><td>{{age}}</td><td>{{sex}}</td></tr>{{/result}}</table><div>";
  7. var views = Mustache.render(template, users);
  8. $("#users_info").html(views);

页面呈现效果:

 

l  语法解释:

i.              对于对象数据Mustache也有其特殊的语法:{{#}}{{/}},如果所给定的数据源是一个对象数组,则可以使用该语法,很方便的用来循环展示。

ii.              其中{{#}}标记表示从该标记以后的内容全部都要循环展示

iii.              {{/}}标记表示循环结束。这种情况多用于table行的展示。

上边我们有讲到{{#}}{{/}}这样的语法,除了上边的循环遍历之外,它还有另外的一层意思就是判空,如果{{#}}中的值为null或false或undefine则其标记内的内容则不展现、

迭代

  1. var data = {
  2. "stooges" : [ {
  3. "name" : "Moe"
  4. }, {
  5. "name" : "Larry"
  6. }, {
  7. "name" : "Curly"
  8. } ]
  9. };
  10. var output = Mustache.render("{{#stooges}}<b>{{name}}</b>{{/stooges}}",
  11. data);
  12. console.log(output);

输出:<b>Moe</b>

<b>Larry</b>

<b>Curly</b>

如果迭代的是数组,还可以用{{.}}来替代每个元素

  1. var data = {
  2. 2 "musketeers" : [ "Athos", "Aramis", "Porthos", "D'Artagnan" ]
  3. 3 };
  4. 4 var output = Mustache.render("{{#musketeers}}* {{&.}}{{/musketeers}}",
  5. 5 data);
  6. 6 console.log(output);

输出:* Athos

* Aramis

* Porthos

* D'Artagnan

迭代输出的还可以是一个function返回的结果,function可以读取当前变量的上下文来获取其他属性执行其他操作

输出: *John Lennon

*Paul McCartney

*George Harrison

*Ringo Starr

8:方法里面可以再执行变量中的表达式

  1. var data = {
  2. "name" : "{{age}}" + "Tater",
  3. "bold" : function() {
  4. return function(text, render) {
  5. console.log(text);
  6. return "<b>" + render(text) + "</b>";
  7. };
  8. },
  9. "age" : 18
  10. };
  11. var output = Mustache.render("{{#bold}}Hi {{name}}.{{/bold}}", data);
  12. console.log(output);

输出结果:

Hi {{age}}Tater.
<b>Hi 18Tater.</b>

9.{{^}}与{{#}}相反,如果变量是null、undefined、 false、和空数组讲输出结果

10.{{!  }}注释

完整使用:

https://github.com/janl/mustache.js

一篇文章:

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:

  1. ...
  2. <script type="text/javascript" src="mustache.js"></script>
  3. <script type="text/javascript">
  4. var data = {
  5. "company": "Apple",
  6. "address": {
  7. "street": "1 Infinite Loop Cupertino</br>",
  8. "city": "California ",
  9. "state": "CA ",
  10. "zip": "95014 "
  11. },
  12. "product": ["Macbook ","iPhone ","iPod ","iPad "]
  13. }
  14. var tpl = '<h1>Hello {{company}}</h1>';
  15. var html = Mustache.render(tpl, data);
  16. console.log( html )
  17. </script>
  18. ...
  19. //运行后 Console 输出:
  20. <h1>Hello Apple</h1>

在 Demo 中可以看到 data 是数据,tpl 是定义的模板,Mustache.render(tpl, data)方法是用于渲染输出最终的 HTML 代码。

借助 Demo 来对语法做简单的介绍:

{{keyName}}
{{}}就是 Mustache 的标示符,花括号里的 keyName 表示键名,这句的作用是直接输出与键名匹配的键值,例如:

  1. var tpl = '{{company}}';
  2. var html = Mustache.render(tpl, data);
  3. //输出:
  4. Apple

{{#keyName}} {{/keyName}}
#开始、以/结束表示区块,它会根据当前上下文中的键值来对区块进行一次或多次渲染,例如改写下 Demo 中的 tpl:

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

注意:如果{{#keyName}} {{/keyName}}中的 keyName 值为 null, undefined, false;则不渲染输出任何内容。

{{^keyName}} {{/keyName}}
该语法与{{#keyName}} {{/keyName}}类似,不同在于它是当 keyName 值为 null, undefined, false 时才渲染输出该区块内容。

  1. var tpl = {{^nothing}}没找到 nothing 键名就会渲染这段{{/nothing}};
  2. var html = Mustache.render(tpl, data);
  3. //输出:
  4. 没找到 nothing 键名就会渲染这段

{{.}}
{{.}}表示枚举,可以循环输出整个数组,例如:

  1. var tpl = '{{#product}} <p>{{.}}</p> {{/product}}';
  2. var html = Mustache.render(tpl, data);
  3. //输出:
  4. <p>Macbook iPhone iPod iPad</p>

{{>partials}}
>开始表示子模块,如{{> address}};当结构比较复杂时,我们可以使用该语法将复杂的结构拆分成几个小的子模块,例如:

  1. var tpl = "<h1>{{company}}</h1> <ul>{{>address}}</ul>"
  2. var partials = {address: "{{#address}}<li>{{street}}</li><li>{{city}}</li><li>{{state}}</li><li>{{zip}}</li>{{/address}}"}
  3. var html = Mustache.render(tpl, data, partials);
  4. //输出:
  5. <h1>Apple</h1>
  6. <ul><li>1 Infinite Loop Cupertino&lt;/br&gt;</li><li>California</li><li>CA</li><li>95014</li></ul>

{{{keyName}}}
{{keyName}}输出会将等特殊字符转译,如果想保持内容原样输出可以使用{{{}}},例如:

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

{{!comments}}
!表示注释,注释后不会渲染输出任何内容。

  1. {{!这里是注释}}
  2. //输出:

参考文章:
http://coenraets.org/blog/2011/12/tutorial-html-templates-with-mustache-js/
http://mustache.github.com/mustache.5.html
http://ued.xinyou.com/2012/07/mustache_5_document.html

参考:

http://blog.csdn.net/xuemoyao/article/details/17896203

http://www.cnblogs.com/flypig88/archive/2012/05/14/2497780.html

  1.  

javascript模板引擎Mustache的更多相关文章

  1. 探究Javascript模板引擎mustache.js使用方法

    这篇文章主要为大家介绍了Javascript模板引擎mustache.js使用方法,mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后 ...

  2. Javascript模板引擎mustache.js详解

    mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后只有9KB,非常值得在项目中使用.本文总结它的使用方法和一些使用心得,内容不算很高深 ...

  3. 模板引擎mustache.js

    Javascript模板引擎mustache.js详解   阅读目录 1. 从一个简单真实的需求讲起 2. mustache的用法 3. mustache的思想 4. {{prop}}标签 5. {{ ...

  4. 推荐13款javascript模板引擎

    javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于j ...

  5. 各种JS模板引擎对比数据(高性能JavaScript模板引擎)

    最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 Ja ...

  6. JavaScript模板引擎实例应用

    在之前的一篇名为<移动端基于HTML模板和JSON数据的JavaScript交互>的文章中,我向大家说明了为什么要使用JavaScript模板以及如何使用,文末还提到了laytpl.art ...

  7. 如何选择Javascript模板引擎(javascript template engine)?

    译者 jjfat 日期:2012-9-17  来源: GBin1.com 随着前端开发的密集度越来越高,Ajax和JSON的使用越来越频繁,大家肯定免不了在前台开发中大量的使用标签,常见到的例子如下: ...

  8. 【JavsScript】推荐五款流行的JavaScript模板引擎

    摘要:Javascript模板引擎作为数据与界面分离工作中最重要一环,受到开发者广泛关注.本文通过开发实例解析五款流行模板引擎:Mustache.Underscore Templates.Embedd ...

  9. Juicer javascript 模板引擎

    模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. js模板引擎包括如下:template官方参考:http://au ...

随机推荐

  1. .Net 组件技术概述

    1. 基本原理 组件是组件系统中功能的表现,没有组件就没有功能.特定接口是用于给组件管理程序来操纵.管理该组件,特定功能是组件需要完成的任务.在一个使用组件建立的产品中会随着功能数目的多少而会有多个组 ...

  2. OJ——华为编程题目:输入字符串括号是否匹配

    package t0815; /* * 华为编程题目:输入字符串括号是否匹配 * 若都匹配输出为0,否则为1 * 样例输入:Terminal user [name | number (1)] * 样例 ...

  3. ASP.NET 常识

    1..NET是什么?         .Net全称.NET Framework是一个开发和运行环境,         该战略是微软的一项全新创意,         它将使得"互联网行业进入一 ...

  4. JavaScript DOM编程艺术 - 读书笔记1-3章

    1.JavaScript语法 准备工作 一个普通的文本编辑器,一个Web浏览器. JavaScript代码必须通过Html文档才能执行,第一种方式是将JavaScript代码放到文档<head& ...

  5. IO流05_OutputStream和Writer输出流

    [输出流中的字节流和字符流] [OutPutStream和Writer] [ OutputStream和Writer中包含的方法 ] void write(int c)       将指定的字节/字符 ...

  6. Harry Potter

    Names appearing in "Harry Potter" 1.Harry Potter ①Harry is from Henry. ②Harry is related t ...

  7. virtual析构函数的作用

    C++ Primter中讲“在 C++ 中,基类必须指出希望派生类重写哪些函数,定义为 virtual 的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数”. 析构函数是为了在 ...

  8. update语句

    [update cicm.cicmodt0702 set msgbody = :1 where msgid between :2 and :3         ] [update cicm.cicmo ...

  9. linux命令行下命令参数前的一横(-)和两横(--)的区别

    原文转自:http://blog.csdn.net/songjinshi/article/details/6816776 在解释这些区别之前我们先了解一下有关linux的背景知识,这个需要大家先认真看 ...

  10. html元素li移动动态效果

    在日常工作当中遇到了一个问题,平铺型列表修改单个内容设置排序时列表排序应与之对应.一下是一个小小的例子:简单的解决了此类问题,以浮动的形式改变当前的数据的显示顺序.有不足之处欢迎指点,后期还会做一个更 ...