一、简介
Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档。当然不同的开发语言有不同模板引擎,如 Javascript 下的 Hogan 、ASP 下的 aspTemplate、以及 PHP 下的 Smarty,这里主要介绍基于 Javascript 语言的模板引擎,目前流行有 Mustache、Hogan、doT.js、JsRender、Kendo UI Templates等,jsperf.com 上可以看到它们的性能对比。

Mustache 是一个轻逻辑的模板语言( Logic-less templates),mustache 是一个js模板,用于展示和js分离,它的优势在于可以应用在 Javascript、PHP、Python、Perl 等多种编程语言中。原本是基于javascript 实现的模板引擎,类似于 freemark和valicity ,但是比freemark和valicity更加轻量级更加容易使用,经过拓展目前支持javascript,java,.NET,PHP,C++等多种 平台下开发!

  • 项目首页:http://mustache.github.com/
  • 项目文档:http://mustache.github.com/mustache.5.html
  • Demo:  http://mustache.github.com/#demo

二、模板:
1)js模板可以是一个html文件

<h1>Hello {{name}}, it is {{timeNow}}.</h1>

2) js模板可以是一个值是html代码的js变量

var template = "<p>Hello {{name}}, it is {{timeNow}}.</p>";

3) js模板可以是一个script片段

<script id="tpl-greeting" type="text/html"><dl><dt>Name</dt><dd>{{name}}</dd><dt>Time</dt><dd>{{timeNow}}</dd></dl>
</script>    

mustache模板语言
1) 变量:  变量标记将当前上下文的变量通过模板渲染,如果当前上下文不存在该变量,则渲染为空串。
默认变量会被经过 HTML 编码处理,如需显示原始值,用三个大括号或者在模板标记的初始加入 & 符号。
{{变量名 }} ,{{{变量名 }}}
如果当前键为基本或对象,则渲染一次,如果为数组,则渲染数组长度次数。节点以 # 号开始,以 / 结束。
模板:{{#stooges}}<b>{{name}}</b><br>{{/stooges}}"
json: {"stooges":[{"name":"王升"},{"name":"梁文彦"},{"name":"石洋"}]};
2).填充数组节点以 # 号开始,以 / 结束,则渲染数组长度次数。
模板{{#数组}}{{数组内的key}}{{/数组}}

var template = "{{#stooges}}<b>{{name}}</b><br>{{/stooges}}";var view = {"stooges":[{"name":"王升"},{"name":"梁文彦"},{"name":"石洋"}]}

3) .函数作为模板的变量,该函数会在当前列表的每一个元素的上下文迭代执行。

var template = "{{#beatles}}* {{name}}<br/>{{/beatles}}";
var 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;}
};

如果节点键的值为函数,注意该函数在执行时的两个参数,第一个为该节点变量的直接值,第二个为函数,其执行的上下文对应视图对象

var template = "{{#bold}}Hi {{name}} {{lastName}}.{{/bold}}";
var view = {"name": "John","lastName": "Lennon","bold": function () {return function (text, render) {return "<b>" + render(text) + "</b>";}
}}

4) mustache模板使用
模板变量在上下找模板变量需要的数据进行填充。json数据的key跟模板的变量对应就会填充。模板变量和json的key对应不上就不填充。生成展示代码没填充的变量不显示
用Mustache.render(template, view)方法填充数据生成展示代码

  • view——为json数据,作为模板上下文
  • template——为模板对象
//模板
var template = "<p>Hello {{name}}, it is {{{ignore name}}}.it is {{&name}}</p>";
//数据
var date = new Date();
var view = {name: "<b>Jonny</b>",timeNow: date.getHours() + ':' + date.getMinutes() };

使用模板文件要用该方法填充数据生成展示代码

$.get('模板文件', function(templates) {var template = $(templates).html();$Mustache.render(template, view);
});

三、Mustache 语法

Mustache 的模板语法很简单,就那么几个,用于HTML,配置文件,源代码等。它的工作方式是通过通过以哈希值或者对象的方式扩展模板标签。

  • {{keyName}}
  • {{#keyName}} {{/keyName}}
  • {{^keyName}} {{/keyName}}
  • {{.}}
  • {{<partials}}
  • {{{keyName}}}
  • {{!comments}}
...
<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>

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

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

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

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

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

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

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

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

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

5. {{>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&lt;/br&gt;</li><li>California</li><li>CA</li><li>95014</li></ul>  

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

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

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

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

四、Mustache.java和Mustache.js开发

1. java开发参见https://github.com/spullara/mustache.java

2. js开发参见https://github.com/janl/mustache.js

参考:

  • 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

转载于:https://www.cnblogs.com/JoannaQ/p/3462318.html

mustache模板技术相关推荐

  1. mustache模板技术简介

    mustache模板技术简介 一.简介 Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档.当然不同的开发语言有不同模板引擎,如 J ...

  2. Mustache模板技术,一个比freemarker轻量级的模板引擎

    一.初识Mustache 同样也是看Dropwizard才知道这个东西的,以前一直是知道诸如freemarker这样的模板引擎,这个是头一次听说,但是听周围的朋友说最早这个东西是出自于JS的,Drop ...

  3. mustache java 性能_mustache模板技术

    一.简介Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档.当然不同的开发语言有不同模板引擎,如 Javascript 下的 Hog ...

  4. 一个对前端模板技术的全面总结

    此文的写作耗时很长,称之为雄文不为过,小心慢用 此文缘由 其实从发布regularjs之后,我发现在google搜索regularjs 不是给我这个画面 <!-- more --> 就是给 ...

  5. JS之模板技术(aui / artTemplate)

    artTemplate是个好东西啊,一个开源的js前端模板引擎,使用简单,渲染效率特别的高. 我经常使用这个技术来在前端动态生成新闻列表,排行榜,历史记录等需要在前端列表显示的信息. 下面是artTe ...

  6. 前端模板技术的全面总结

    此文缘由 其实从发布regularjs之后,我发现在google搜索regularjs 不是给我这个画面 <!-- more --> 就是给我这个画面 突然发现取名字真是个大学问,当时就基 ...

  7. freemarker中运算符_如何在Web应用系统表示层开发中应用Velocity模板技术

    软件项目实训及课程设计指导--如何在Web应用系统表示层开发实现中应用Velocity模板技术 1.分离Web表示层的数据处理和展现逻辑的常见的应用技术 分离Web表示层的数据处理和展现逻辑是目前企业 ...

  8. php模板技术smarty,PHP模板技术Smarty

    基本信息 讲师: 高洛峰 时长:60分钟 集数:9 每集定价:20 元 描述: 如果你正在设计一个交互式的网站,你一定会关注两个主要的问题,就是界面美工和应用程序.在大多数的项目组中,开发一个Web程 ...

  9. SpringBoot下的模板技术Thymeleaf详解

    Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发. 模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#.PHP语言体系下也有模板引擎,在Java ...

最新文章

  1. 每日一皮:据说现在小孩从小容易生病、体质不如从前是因为少了这个运动......
  2. *迭代 分支回收、创建偷懒脚本
  3. 干货 | DevSecOps在携程的最佳实践
  4. tf.layers.Dense与 tf.layers.dense的区别
  5. 教师计算机提升学到的知识,计算机教学质量提升措施浅谈.doc
  6. 前端学习(905):js执行机制
  7. 导航类查询词的收集方法
  8. Redis常见客户端异常汇总
  9. 横向合计代码 锐浪报表_[原创]锐浪报表动态加入列和最后加入合计列+进度条显示...
  10. javaScript重定向页面
  11. SpringCloud(4)— 统一网关Gateway
  12. 自己开发iOS版按键精灵--TTouch
  13. 软件测试丨工具在接口测试中发挥什么样的作用?
  14. 推荐一个小巧强大的代码编辑器
  15. 什么是分布式存储系统?
  16. 温度指示报警电路设计报告
  17. PyTorch入门: Kaggle 泰坦尼克幸存者预测
  18. C#开发AGV地图编辑软件(二)
  19. 安装VS2010的过程遇到VC10.0 Runtime组件安装失败怎么解决
  20. C++ 的成功属于意料之外

热门文章

  1. 一脸懵逼学习hadoop之HDFS的java客户端编写
  2. 《从问题到程序:用Python学编程和计算》——第3章 基本编程技术 3.1 循环程序设计...
  3. 【剑指offer】树的子结构
  4. 常用工具之zabbix
  5. Zencart获取PayPal PDT Token参数教程方法
  6. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器
  7. Java高并发程序设计学习笔记(十一):Jetty分析
  8. PYTHON-模块timedatetime+ 目录规范
  9. linux清除邮件队列
  10. 搭建Hexo部署到github上