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


Posted in Javascript onJanuary 26, 2016

我们将为大家详解Mustache.js轻量级JavaScript模版引擎使用方法。

简单示例

function show(t) {
 $("#content").html(t);
}
var view = {
 title: 'YZF',
 cacl: function () {
 return 6 + 4;
 }
};
$("#content").html(Mustache.render("{{title}} spends {{cacl}}", view));

可以很明显的看出Mustache模板的语法,只需要使用{{和}}包含起来就可以了,里面放上对象的名称。

通过本示例也可以看出,如果指定的属性为函数的时候,不会输出函数里面的内容,而是先执行函数,然后将返回的结果显示出来。

不转义HTML标签

var view = {
 name: "YZF",
 company: "<b>ninesoft</b>"
};
show(Mustache.render("{{name}} <br /> {{company}} <br />{{{company}}}<br/>{{&company}}", view));

通过这个示例可以看出Mustache默认是会将值里面的html标记进行转义的,但是有时候我们并不需要。

所以这里我们可以使用{{{和}}}包含起来,或者是{{和}}包含,那么Mustache就不会转义里面的html标记。

绑定子属性的值

var view = {
 "name": {
 first: "Y",
 second: "zf"
 },
 "age": 21
};
show(Mustache.render("{{name.first}}{{name.second}} age is {{age}}", view));

相信看到第一个示例的时候,就会有人想到能不能绑定子属性,如果你努力看下去了。那么祝贺你,现在就是解决你的需求的方式,仅仅只需要通过.来使用子属性即可。

条件式选择是否渲染指定部分

var view = {
 person: false
};
show(Mustache.render("eff{{#person}}abc{{/person}}", view));

问题总是不断,如果我们还需要能够根据我们给的值,决定是否渲染某个部分,那么现在就可以解决这个问题,当然还要提示的就是不仅仅是false会导致不渲染指定部分。

null,空数组,0,空字符串一样有效。语法上面比较简单,就是使用{{#key}} ... {{/key}}来控制中间的内容。

循环输出

var view = {
 stooges: [
 { "name": "Moe" },
 { "name": "Larry" },
 { "name": "Curly" }
 ]
};
show(Mustache.render("{{#stooges}}{{name}}<br />{{/stooges}}", view));

仅仅学会上面的方式,大部分地方你都解决了,但是还是会出现麻烦的地方,就是循环输出,如果你一个一个写,相信会很烦躁,当然Mustache不会让我们失望,它也给出了如何循环输出的方式,这里是将一个由对象组成的数组输出,如果我们输出的是数组,就需要使用{{.}}来替代{{name}}。

循环输出指定函数处理后返回的值

var view = {
 "beatles": [
 { "firstname": "Johh", "lastname": "Lennon" },
 { "firstname": "Paul", "lastname": "McCartney" }
 ],
 "name": function () {
 return this.firstname + this.lastname;
 }
};
show(Mustache.render("{{#beatles}}{{name}}<br />{{/beatles}}", view));

循环输出是有了,但是我们还想后期进行加工。那么这个完全符合你的需要,因为Mustache会将数组中的值传递给你的函数,输出你函数返回的值。这里我们可以看到最外层是数组,只要在里面使用函数那么外层的数组就会作为这个函数的参数传递进去。

自定义函数

var view = {
 "name": "Tater",
 "bold": function () {
 return function (text, render) {
   return render(text) + "<br />";
 }
 }
}
show(Mustache.render("{{#bold}}{{name}}{{/bold}}", view));

上面我们都是用的变量作为节,那么我们现在用函数作为节,会有什么效果呢。

它会调用我们函数返回的函数,将节中间的原始字符串作为第一个参数,默认的解释器作为第二个参数,那么我们就可以自行加工。

反义节

var view = {
 "repos": []
};
show(Mustache.render("{{#repos}}{{.}}{{/repos}}{{^repos}}no repos{{/repos}}", view));

上面我们也用节,但是仅仅只能选择是否输出某个部分。所以这里我们弥补一下。

如果我们使用了{{^和}}来定义节的话,那么这个部分只会在里面的值为空,null,空数组,空字符串的时候才会显示。那么我们就可以实现了if else的效果了。

部分模板

var view = {
 names: [
 { "name": "y" },
 { "name": "z" },
 { "name": "f" }
 ]
};
var base = "<h2>Names</h2>{{#names}}{{>user}}{{/names}}";
var name = "<b>{{name}}</b>";
show(Mustache.render(base, view, { user: name }));

Mustache虽然节约了很多时间,但是我们定义了很多模板,但是彼此之间无法互相嵌套使用,也会造成繁琐。

所以这里我们还要介绍如何定义部分模板,用来在其他模板里面使用,这里使用其他模板的方式仅仅是{{>templetename}}。

最大的不同就是Mustache.render方法有了第三个参数。

预编译模板

Mustache.parse(template);
//其他代码
Mustache.render(template,view);

模板既然有好处,也有坏处。就是编译模板需要时间,所以在我们已知会使用某个模板的前提下,我们可以预先编译好这个模板,以便后面的使用。

希望本文所述对大家学习有所帮助。

Javascript 相关文章推荐
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
Javascript实现重力弹跳拖拽运动效果示例
Jun 28 Javascript
动态添加option及createElement使用示例
Jan 26 Javascript
table insertRow、deleteRow定义和用法总结
May 14 Javascript
js+jquery常用知识点汇总
Mar 03 Javascript
js实现仿京东2级菜单效果(带延时功能)
Aug 27 Javascript
JS使用贪心算法解决找零问题示例
Nov 27 Javascript
js+SVG实现动态时钟效果
Jul 14 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
Oct 16 Javascript
jquery检测上传文件大小示例
Apr 26 jQuery
javascript代码实现简易计算器
Jan 25 Javascript
JavaScript实现显示和隐藏图片
Apr 29 Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 #Javascript
一篇文章掌握RequireJS常用知识
Jan 26 #Javascript
JS正则表达式比较常见用法
Jan 26 #Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 #Javascript
JS组件中bootstrap multiselect两大组件较量
Jan 26 #Javascript
JS组件Form表单验证神器BootstrapValidator
Jan 26 #Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
Jan 26 #Javascript
You might like
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
十天学会php之第十天
2006/10/09 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
jQuery 动态酷效果实现总结
2009/12/27 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
Three.js基础学习教程
2017/11/16 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python实现静态服务器
2019/09/05 Python
高校生生产实习自我鉴定
2013/09/21 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
现货白银电话营销话术
2015/05/29 职场文书
交通安全教育心得体会
2016/01/15 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python
Nginx的gzip相关介绍
2022/05/11 Servers