javascript库之Mustache库使用说明
一、简单示例
代码:
function show(t) {
$("#content").html(t);
} var view = {
title: 'YZF',
cacl: function () {
return 6 + 4;
}
};
$("#content").html(Mustache.render("{{title}} spends {{cacl}}", view));
结果:
YZF spends 10
结论:
可以很明显的看出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库之Mustache库使用说明的更多相关文章
- Javascript触屏手势库-JTouch(更新V1.1)
作者:痞子|时间:2013-05-21|分类目录:js,javascript,jquery教程|Tag标签: javascript.jTouch|阅读(857) 7 条评论 Javascript触屏手 ...
- 前端工具 - 15个最佳的 JavaScript 表单验证库
客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...
- 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐!
作者:编辑部的故事 < 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐! > 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐! Tutoria ...
- 15个最佳的 JavaScript 表单验证库
客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...
- 第一百六十一节,封装库--JavaScript,完整封装库文件
封装库--JavaScript,完整封装库文件 /** *feng_zhuang_ku_1.0版本,js封装库,2016/12/29日:林贵秀 **/ /** 前台调用 * 每次调用$()创建库对象, ...
- 第一百四十三节,JavaScript,利用封装库做百度分享
JavaScript,利用封装库做百度分享 效果图 html代码 <div id="share"> <h2>分享到</h2> <ul> ...
- 推荐一些好用的 HTML5 & JavaScript 游戏引擎开发库
推荐一些好用的 HTML5 & JavaScript 游戏引擎开发库 0. 引言 如果你是一个游戏开发者,并且正在寻找一个可以与 JavaScript 和 HTML5 无缝工作的游戏引擎.那么 ...
- Linux 静态库和动态库 使用说明
Linux下程序运行中,有两种库,静态库和动态库. 静态库:名字一般为libxxx.a,编译时会整合到可执行程序中,优点是运行时不需要外部函数库支持,缺点是编译后程序较大,一旦静态库改 ...
- 锋利的jQuery-1--解决jquery库和其他库的冲突
在jquery中,$(美元符号)就是jquery的别名,也就是说使用$和使用jquery是一样的,在很多时候我们命名空间时,正是因为这 个$而产生的冲突的发生.比如说:$('#xmlas')和JQue ...
随机推荐
- Spring data jpa Specification查询关于日期的范围搜索
代码: 时间格式化类型: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat s ...
- [Android Security] Smali和逆向分析
copy : https://blog.csdn.net/u012573920/article/details/44034397 1.Smali简介 Smali是Dalvik的寄存器语言,它与Java ...
- Kubernetes基础:查看状态、管理服务
目标 了解Kubernetes Pod 了解Kubernetes Node 学习如何调试部署问题 了解如何通过Service暴露应用 Kubernetes Pods 在Kubernetes中创建一个D ...
- modbus.c
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //#include ...
- 5句mysql语句
显示表的结构: mysql> DESCRIBE MYTABLE; 往表中加入记录 mysql> insert into MYTABLE values ("hyq",&q ...
- Round() 四舍五入 js银行家算法
首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825; ...
- iOS开发-Bug锦囊
duplicate symbols for architecture armv7 今天修改了自己项目的部分代码,发现XCode编译的时候报错:duplicate symbols for archite ...
- fn:replace()函数
fn:replace()函数将字符串中所有指定的子串用另外的字符串替换. 语法 fn:replace()函数的语法如下: ${fn:replace(<原始字符串>, <被替换的字符串 ...
- 大数据开发实战:离线大数据处理的主要技术--Hive,概念,SQL,Hive数据库
1.Hive出现背景 Hive是Facebook开发并贡献给Hadoop开源社区的.它是建立在Hadoop体系架构上的一层SQL抽象,使得数据相关人员使用他们最为熟悉的SQL语言就可以进行海量数据的处 ...
- walmart weekly sales
最近参加了kaggle的walmart weekly sales 预测比赛,已经过期但还能提交获得评分.Walmart Recruiting - Store Sales Forecasting 提供的 ...