一、简介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文件

Hello {{name}}, it is {{timeNow}}.

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

var template = "

Hello {{name}}, it is {{timeNow}}.

";

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

Name
{{name}}
Time
{{timeNow}}

mustache模板语言

1) 变量:  变量标记将当前上下文的变量通过模板渲染,如果当前上下文不存在该变量,则渲染为空串。

默认变量会被经过 HTML 编码处理,如需显示原始值,用三个大括号或者在模板标记的初始加入 & 符号。

{{变量名 }} ,{{{变量名 }}}

如果当前键为基本或对象,则渲染一次,如果为数组,则渲染数组长度次数。节点以 # 号开始,以 / 结束。

模板:{{#stooges}}{{name}}
{{/stooges}}"

json: {"stooges":[{"name":"王升"},{"name":"梁文彦"},{"name":"石洋"}]};

2).填充数组节点以# 号开始,以 / 结束,则渲染数组长度次数。

模板{{#数组}}{{数组内的key}}{{/数组}}

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

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

var template = "{{#beatles}}* {{name}}
{{/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 "" + render(text) + "";}

}}

4) mustache模板使用

模板变量在上下找模板变量需要的数据进行填充。json数据的key跟模板的变量对应就会填充。模板变量和json的key对应不上就不填充。生成展示代码没填充的变量不显示

用Mustache.render(template, view)方法填充数据生成展示代码

view——为json数据,作为模板上下文

template——为模板对象

//模板

var template = "

Hello {{name}}, it is {{{ignore name}}}.it is {{&name}}

";//数据

var date = newDate();var view = {name: "Jonny",timeNow: date.getHours() + ':' + date.getMinutes() };

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

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

$Mustache.render(template, view);

});

三、Mustache 语法

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

{{keyName}}

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

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

{{.}}

{{

{{{keyName}}}

{{!comments}}

...

var data ={"company": "Apple","address": {"street": "1 Infinite Loop Cupertino","city": "California ","state": "CA ","zip": "95014 "},"product": ["Macbook ","iPhone ","iPod ","iPad "]

}var tpl = '

Hello {{company}}

';var html =Mustache.render(tpl, data);

console.log( html )

...//运行后 Console 输出:

Hello Apple

1. {{keyName}}

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

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

Apple

2. {{#keyName}} {{/keyName}}

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

var tpl = '{{#address}}

{{street}},{{city}},{{state}}

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

1 Infinite Loop Cupertino</br>,California,CA

注意:如果{{#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}}

{{.}}

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

Macbook iPhone iPod iPad

5. {{>partials}}

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

var tpl = "

{{company}}

  • {{>address}}

"

var partials = {address: "{{#address}}

{{street}}{{city}}{{state}}{{zip}}{{/address}}"}var html =Mustache.render(tpl, data, partials);//输出:

Apple

  • 1 Infinite Loop Cupertino</br>
  • California
  • CA
  • 95014

6. {{{keyName}}}

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

var tpl = '{{#address}}

{{{street}}}

{{/address}}'

//输出:

1 Infinite Loop Cupertino

7. {{!comments}}

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

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

四、Mustache.java和Mustache.js开发

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

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

参考:

mustache java 性能_mustache模板技术相关推荐

  1. java性能保障技术_狙击P7!阿里大佬亲授“Java性能调优技术宝典”,太完整了!...

    一.前言 什么是性能调优? 性能调优其实很好理解,就是优化硬件.操作系统.应用之间的一个充分的协作,最大化的发挥出硬件的极致性能,来应对高负载的业务需求. 为什么需要性能优化? 其实说到底就是两个原因 ...

  2. 狙击P7!阿里大佬亲授“Java性能调优技术宝典”,太完整了!

    一.前言 什么是性能调优? 性能调优其实很好理解,就是优化硬件.操作系统.应用之间的一个充分的协作,最大化的发挥出硬件的极致性能,来应对高负载的业务需求. 为什么需要性能优化? 其实说到底就是两个原因 ...

  3. 五大最佳开源java性能监控工具

    五大最佳开源java性能监控工具-IT168 技术开发专区 http://tech.it168.com/a2017/0120/3093/000003093435.shtml

  4. mustache模板技术简介

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

  5. mustache模板技术

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

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

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

  7. 提高C++性能的编程技术笔记:标准模板库+测试代码

    标准模板库(Standard Template Library, STL)是容器和通用算法的强效组合. 渐近复杂度:算法的渐近复杂度是对算法性能的近似估计.它是算法集到特定性能标准集的映射.如果需要对 ...

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

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

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

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

最新文章

  1. 浅谈同一家公司多个系统,共用登录用户名和密码
  2. Qt 数据库操作(二)
  3. 窗体控件随窗体大小改变(仍有不足)
  4. 看看差距--完备技术面试
  5. MySQL如何删除有外键约束的数据
  6. apache部署多个项目
  7. oracle+技术面试,Oracle技术面试问题
  8. java pgp加密_如何解密PGP加密文件(由两个PGP密钥加密.Key1具有公钥,私钥.Key2只有公钥)通过JAVA API...
  9. MySQL 实例空间使用率过高的原因和解决方法
  10. 程序员到CTO还需要大补什么营养
  11. LINUX右键打开方式,如何同时存在多种应用?
  12. 4.2.5 求解幂集问题
  13. (转)IDEA2017破解码(亲测可用)
  14. 联想服务器系统如何备份软件,联想笔记本如何使用系统自带备份/还原功能进行备份与还原系统...
  15. 高等代数笔记4:线性空间
  16. vim从入门到丝滑学习笔记
  17. 电话激活Windows 中文操作系统步骤
  18. 是面试官放水,还是公司实在是太缺人?这都没挂,阿里巴巴原来这么容易进...
  19. 技术创业者必读:从验证想法到技术产品商业化的全方位解析
  20. 热修复 移动平台热更新技术背景

热门文章

  1. 分布式系统(P2P Lookup)
  2. 计算机主机网关的作用是什么意思,网关是什么意思 网关的作用【详解】
  3. C语言(C++)中:详解floor函数、ceil函数和round函数
  4. 微方歌词管理系统 v6.0 免费
  5. C++11新特性——智能指针之shared_ptr
  6. 考试如何用计算机,注会考试计算器如何使用 达江老师教你一招
  7. channel 通道查询
  8. 数字图像处理第六章 ——彩色图像处理(下)
  9. 最经典的夫妻对白(加长版)【爆笑无极限】
  10. 30个为Web设计人员和开发人员准备的Opera浏览器扩展