一、简单示例

代码:

             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库使用说明的更多相关文章

  1. Javascript触屏手势库-JTouch(更新V1.1)

    作者:痞子|时间:2013-05-21|分类目录:js,javascript,jquery教程|Tag标签: javascript.jTouch|阅读(857) 7 条评论 Javascript触屏手 ...

  2. 前端工具 - 15个最佳的 JavaScript 表单验证库

    客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...

  3. 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐!

    作者:编辑部的故事   <  开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐!   > 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐! Tutoria ...

  4. 15个最佳的 JavaScript 表单验证库

    客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...

  5. 第一百六十一节,封装库--JavaScript,完整封装库文件

    封装库--JavaScript,完整封装库文件 /** *feng_zhuang_ku_1.0版本,js封装库,2016/12/29日:林贵秀 **/ /** 前台调用 * 每次调用$()创建库对象, ...

  6. 第一百四十三节,JavaScript,利用封装库做百度分享

    JavaScript,利用封装库做百度分享 效果图 html代码 <div id="share"> <h2>分享到</h2> <ul> ...

  7. 推荐一些好用的 HTML5 & JavaScript 游戏引擎开发库

    推荐一些好用的 HTML5 & JavaScript 游戏引擎开发库 0. 引言 如果你是一个游戏开发者,并且正在寻找一个可以与 JavaScript 和 HTML5 无缝工作的游戏引擎.那么 ...

  8. Linux 静态库和动态库 使用说明

        Linux下程序运行中,有两种库,静态库和动态库.     静态库:名字一般为libxxx.a,编译时会整合到可执行程序中,优点是运行时不需要外部函数库支持,缺点是编译后程序较大,一旦静态库改 ...

  9. 锋利的jQuery-1--解决jquery库和其他库的冲突

    在jquery中,$(美元符号)就是jquery的别名,也就是说使用$和使用jquery是一样的,在很多时候我们命名空间时,正是因为这 个$而产生的冲突的发生.比如说:$('#xmlas')和JQue ...

随机推荐

  1. Chocolatey 简介(软件自动化管理工具)

    一.Chocolatey 管理Windows软件的明智方法 1.建立在技术的无人值守安装和PowerShell.建立在技术的无人值守安装和PowerShell. 2.轻松管理Windows软件的所有方 ...

  2. .Net Standard 类库的创建和使用

    一..Net Standard类库的创建 1.在当前Vs 2017中创建.Net Standard 类库项目,目前版本默认值 .Net Standard v1.4 二..Net Standard类库的 ...

  3. 基于DPI(深度报文解析)的应用识别

    一.概述 1.DPI(Deep packet inspection,深度报文解析) 所谓“深度”是和普通的报文分析层次相比较而言的,“普通报文检测”仅分析IP包4 层以下的内容,包括源地址.目的地址. ...

  4. 总是容易忘记:enum、int、string之间的快速转换

    public enum Color { Red=, Green= } (1)Enum转换为String Color.Read.ToString() Convert.ToString(Color.Gre ...

  5. 什么是 Event Loop?

    http://www.ruanyifeng.com/blog/2013/10/event_loop.html 什么是 Event Loop? 作者: 阮一峰 日期: 2013年10月21日 [2014 ...

  6. thinkphp生成的验证码不显示问题解决

    在调用验证码之前加上 ob_clean(); 不显示验证码的代码: public function verify(){ $verify = new \Think\Verify(); $verify-& ...

  7. javaScript:让文本框内的最后一个文字的后面获得焦点

    //当失去交点以后 让文本框内的文字获得焦点 并且光标移到最后一个字后面 function myfocus(myid) { if(isNav){ document.getElementById(myi ...

  8. 【Spark】SparkStreaming-输出到Kafka

    SparkStreaming-输出到Kafka sparkstreaming output kafka_百度搜索 SparkStreaming采用直连方式(Direct Approach)获取Kafk ...

  9. VIM的buffers

    原文:http://ju.outofmemory.cn/entry/13522 重新在不同的 tab 中打开多个关闭的buffer 文件, https://stackoverflow.com/ques ...

  10. Spring(十六):泛型依赖注入

    简介: Spring4.X之后开始支持泛型依赖注入. 使用示例: 1.定义实体 package com.dx.spring.bean.componentscan; import java.io.Ser ...