简要介绍

玩过node的人应该都知道ejs,jade。 mustache和他们一样都是模板渲染引擎,我个人喜欢mustache,因为他非常简洁,代码量才600多行。

mustache既可以在前端使用,也可以在后端使用。对于文档里面有的内容,这里就不摘抄了,没什么意思,记录一下文档里面讲解不清楚的地方。

使用模板

mustache有一点不是太好,他的模板无法通过指定模板的位置来加载渲染,必须读取出模板内容之后才能进行渲染。这都无所谓的,如果在后端需要从文件读取模板的话,稍稍写一下

就可以了。下面给出测试代码。

  • 主文件
//Created by yyrdl on 2015/10/2.
var Mustache=require("mustache");
var tool=require("./readFile");
var view={
names:[{
"name":'zj'
},{
"name":"yyrdl"
}]
};
var tems=["./templates/base.mustache","./templates/user.mustache"];
var tasks=tems.map(function(path){
return new Promise(function(resolve,reject){
tool.readFile(path,function(err,res){
if(err){
reject(err);
}else{
resolve(res);
}
});
})
});
Promise.all(tasks).then(function(results){
var out=Mustache.render(results[0],view,{
user:results[1]
});
console.log(out);
});
  • base.mustache
<h2>Names</h2>
{{#names}}
{{> user}}
{{/names}}
  • user.mustache
<strong>{{name}}</strong>
  • 项目结构

  • 输出结果

基本的mustache语法还请看mustache官网的介绍。在base.mustache里我们使用 {{>user}}引用了外部模板user,user的内容在

Mustache.render()的第三个参数里有指明.

条件编译

在ejs里可以使用if else 语句,不过是嵌在模板里,嵌多了就感觉乱糟糟的,在mustache里面不用!

{{#repos}}<b>{{name}}</b>{{/repos}}
{{^repos}}No repos :({{/repos}}

如果在传入的数据中repos字段存在,并且 !repos!==true 则上面的第一行将会被渲染,而第二行将被忽略;反之则结果想反。比如:

  var template="{{#repos}}<b>{{name}}</b>{{/repos}}"+
"{{^repos}}No repos :({{/repos}}";
var data={
"repos":[{"name":"zj"}]
}
var out=Mustache.render(template,data);
// the result is: <b>zj</b>

将第一个例子中的base.mustache这样写

  <h2>Names</h2>
{{#st}}
{{#names}}
{{> user}}
{{/names}}
{{/st}}

然后将主文件中的view改为:

  var view={
show:false,
names:[{
"name":"zj"
},{
"name":"yyrdl"
}],
st:function(){
return this.show;
}
};

输出的结果为:

大概你已经看出,我们大可以只改变view中show的值来决定输出了,从这里可以看出mustache的灵活,也显出他的强大.


下面是将view.show=true的输出



---记录,分享

Mustache的更多相关文章

  1. 微信小程序技术分析:Mustache语法要点总结

    小程序开发的wxml里,用到了Mustache语法.所以,非常有必要把Mustache研究下. 什么是Mustache?Mustache是一个logic-less(轻逻辑)模板解析引擎,它是为了使用户 ...

  2. Javascript模板引擎mustache.js详解

    mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后只有9KB,非常值得在项目中使用.本文总结它的使用方法和一些使用心得,内容不算很高深 ...

  3. Mustache 使用总结

    前言: 在分析 jeesite 项目的时候,看到了 Mustache,于是查了下 正文: 1.Mustache 概述 Mustache 是基于 JavaScript 实现的模板引擎,即用来 渲染前台页 ...

  4. Mustache 使用心得总结

    Mustache 使用心得总结 前言: 之前的一个项目里面就有用到这个前台的渲染模版,当时挺忙的也没时间抽空总结一下,刚好上周项目里又用到这个轻量型的渲染模版,真心感觉很好用,因此就总结一下使用心得, ...

  5. mustache模板渲染的基本原理

    mustache.js是一个模板引擎,为开发节省了大量的“人力”,对于初学者,我是从这篇 和这篇 博客接触的,算是对mustache有了初步认识,不得不承认自己还是菜鸟阶段还有太多东西要学,慢慢熟悉. ...

  6. Mustache.js前端模板引擎源码解读

    mustache是一个很轻的前端模板引擎,因为之前接手的项目用了这个模板引擎,自己就也继续用了一会觉得还不错,最近项目相对没那么忙,于是就抽了点时间看了一下这个的源码.源码很少,也就只有六百多行,所以 ...

  7. mustache.js

    mustache.js 是一个 Mustache 模板系统的 JavaScript 实现. Mustache 模板语法的逻辑比较简单.它用于HTML,配置文件,源代码等.它的工作方式是通过通过以哈希值 ...

  8. mustache.js渲染带事件的模板

    http://zccst.iteye.com/blog/2183111 最近遇到这样一个问题,预览内容可点击,问题是通过$.Mustache.render("templateId" ...

  9. Mustache.js使用笔记(内容属于转载总结)

    1.Mustache的语法很简单,用两个大括号标记要绑定的字段即可,“{{}}” Mustache主要的渲染方法为Mustache.render(),该方法有两个参数,第一个为要渲染的模版, 也就是例 ...

  10. mustache模板技术

    一.简介Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档.当然不同的开发语言有不同模板引擎,如 Javascript 下的 Hog ...

随机推荐

  1. Python、C和Java对比

    先上一个Python小测试: #!/usr/bin/env python #coding=utf-8 ''' 等腰三角形 ''' for i in range(1,6): print ' '*(6-i ...

  2. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 LCT

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...

  3. httpclient模拟浏览器訪问站点

    HttpClient 是 Apache Jakarta Common 下的子项目.能够用来提供高效的.最新的.功能丰富的支持 HTTP 协议的client编程工具包.而且它支持 HTTP 协议最新的版 ...

  4. Cocos2d-x 3.x 资料整理

     cocos2d-x-3.0rc0新project的分辨率设置和控制台输出信息 http://kome2000.blog.51cto.com/969562/1379704 Cocos2d-x 3. ...

  5. iOS开发:AVPlayer实现流音频边播边存

    1. AVPlayer简介 AVPlayer存在于AVFoundation中,可以播放视频和音频,可以理解为一个随身听 AVPlayer的关联类: AVAsset:一个抽象类,不能直接使用,代表一个要 ...

  6. 定时自动同步文件,支持多文件夹同步,支持过滤文件和文件夹,解决FileSystemWatcher多次文件触发事件(源码)

    博客园里面有很多同步工具和软件,关于FileSystemWatcher类解释的也很多,但收集了很多文章后,感觉没好的方法,自己没事写了一个定时文件同步,借鉴了很多博客园朋友的东西: 上主菜: 配置文件 ...

  7. Js_分页

    public ActionResult Index(int? pageIndex) { List<string> data = new List<string>(); ; i ...

  8. SQL Server 中添加用户

    在对象资源管理器中点击安全性,选择登录名-新建登录名

  9. iOS之自定义UITabBar替换系统默认的(添加“+”号按钮)

    自定义UITabBar替换系统默认的,目的是为了在UITabBar中间位置添加一个“+号按钮”,下面我们来聊聊具体的实现. 1.自定义WBTabBar,让其继承自UITabBar,代码如下: // / ...

  10. C语言---翻译过程

    c的实现中包括两种环境: 1.翻译环境(translation environment):源程序---->机器指令 2.执行环境(execution environment):执行机器指令 这两 ...