探究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 相关文章推荐
jquery dialog open后,服务器端控件失效的快速解决方法
Dec 19 Javascript
中止javascript执行的方法
Feb 14 Javascript
JavaScript中的acos()方法使用详解
Jun 14 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
Jun 25 Javascript
jquery实现的Accordion折叠面板效果代码
Sep 02 Javascript
使用jQuery制作基础的Web图片轮播效果
Apr 22 Javascript
AngularJS 简单应用实例
Jul 28 Javascript
简单实现js无缝滚动效果
Feb 05 Javascript
提高JavaScript执行效率的23个实用技巧
Mar 01 Javascript
JavaScript设计模式之建造者模式实例教程
Jul 02 Javascript
使用Sonarqube扫描Javascript代码的示例
Dec 26 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
May 16 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
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
详解微信小程序支付流程与梳理
2019/07/16 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
2019/08/13 Python
Python类型转换的魔术方法详解
2020/12/23 Python
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
大学生应聘自荐信
2013/10/11 职场文书
优秀员工推荐信
2014/05/10 职场文书
公司年终奖分配方案
2014/06/16 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
员工离职感谢信
2015/01/22 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android