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 ...
随机推荐
- Python数据分析笔记
最近在看Python数据分析这本书,随手记录一下读书笔记. 工作环境 本书中推荐了edm和ipython作为数据分析的环境,我还是刚开始使用这种集成的环境,觉得交互方面,比传统的命令行方式提高了不少. ...
- 深入探索 JUnit 4
开始之前 关于本教程 引入 Java 5 注释为 JUnit 带来了显著改变,使它从一个受广大开发人员了解和喜爱的测试框架转变成了一个更为精简但却不那么为人熟知的框架.在本教程中,我将探讨 JUnit ...
- golang导入包的几个说明:import
导入包: 标准包使用的是给定的短路径,如"fmt"."net/http" 自己的包,需要在工作目录(GOPATH)下指定一个目录,improt 导入包,实际上就 ...
- spring学习之@SessionAttributes
一.@ModelAttribute 在默认情况下,ModelMap 中的属性作用域是 request 级别是,也就是说,当本次请求结束后,ModelMap 中的属性将销毁.如果希望在多个请求中共享 M ...
- GFW实现原理
GFW的工作机制主要包括: 1. IP黑名单 2. 内容审查 3. DNS劫持 参考链接:http://www.doc88.com/p-8435599803718.html
- 开闭原则(Open Closed Principle,OCP)
遵循开闭原则设计出的模块具有两个主要特征: 对于扩展是开放的(Open for extension).这意味着模块的行为是可以扩展的.当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的 ...
- EF6源码学习-准备篇
现在对于.net开发人员来说EF已经很流行了,虽然我在2010年的时候就用过EF,也看过几本书,但是还没有仔细研究EF的code, 曾经也尝试阅读EF5的源代码,后来由于时间关系也没有坚持住.现在计划 ...
- SCRIPT5009: “Sys”未定义 部署.net ajax 解决方案
今天在部署asp.net ajax 的时候发现部署服务器的时候,ajax刷新不正确,开始以为是System.Web.Extensions没有引用到本地,baidu一圈发现(最近google上不了郁闷~ ...
- zTree怎么判断树有节点展开或者完全关闭的
树节点有个open属性,引用API: 记录 treeNode 节点的 展开 / 折叠 状态.1.初始化节点数据时,如果设定 treeNode.open = true,则会直接展开此节点2.叶子节点 t ...
- light oj 1007 Mathematically Hard (欧拉函数)
题目地址:light oj 1007 第一发欧拉函数. 欧拉函数重要性质: 设a为N的质因数.若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N ...