Mustache
简要介绍
玩过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的更多相关文章
- 微信小程序技术分析:Mustache语法要点总结
小程序开发的wxml里,用到了Mustache语法.所以,非常有必要把Mustache研究下. 什么是Mustache?Mustache是一个logic-less(轻逻辑)模板解析引擎,它是为了使用户 ...
- Javascript模板引擎mustache.js详解
mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后只有9KB,非常值得在项目中使用.本文总结它的使用方法和一些使用心得,内容不算很高深 ...
- Mustache 使用总结
前言: 在分析 jeesite 项目的时候,看到了 Mustache,于是查了下 正文: 1.Mustache 概述 Mustache 是基于 JavaScript 实现的模板引擎,即用来 渲染前台页 ...
- Mustache 使用心得总结
Mustache 使用心得总结 前言: 之前的一个项目里面就有用到这个前台的渲染模版,当时挺忙的也没时间抽空总结一下,刚好上周项目里又用到这个轻量型的渲染模版,真心感觉很好用,因此就总结一下使用心得, ...
- mustache模板渲染的基本原理
mustache.js是一个模板引擎,为开发节省了大量的“人力”,对于初学者,我是从这篇 和这篇 博客接触的,算是对mustache有了初步认识,不得不承认自己还是菜鸟阶段还有太多东西要学,慢慢熟悉. ...
- Mustache.js前端模板引擎源码解读
mustache是一个很轻的前端模板引擎,因为之前接手的项目用了这个模板引擎,自己就也继续用了一会觉得还不错,最近项目相对没那么忙,于是就抽了点时间看了一下这个的源码.源码很少,也就只有六百多行,所以 ...
- mustache.js
mustache.js 是一个 Mustache 模板系统的 JavaScript 实现. Mustache 模板语法的逻辑比较简单.它用于HTML,配置文件,源代码等.它的工作方式是通过通过以哈希值 ...
- mustache.js渲染带事件的模板
http://zccst.iteye.com/blog/2183111 最近遇到这样一个问题,预览内容可点击,问题是通过$.Mustache.render("templateId" ...
- Mustache.js使用笔记(内容属于转载总结)
1.Mustache的语法很简单,用两个大括号标记要绑定的字段即可,“{{}}” Mustache主要的渲染方法为Mustache.render(),该方法有两个参数,第一个为要渲染的模版, 也就是例 ...
- mustache模板技术
一.简介Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档.当然不同的开发语言有不同模板引擎,如 Javascript 下的 Hog ...
随机推荐
- 提高你的Java代码质量吧:少用静态导入
一.分析 从Java 5开始引入静态导入语法(import static),其目的是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序. 但是,滥用静态导入会使程序更难阅读,更难维护.静态导 ...
- CAS Tomcat实现单点登录
转贴: http://www.cnblogs.com/ja-net/archive/2012/07/25/2608536.html 最近这两天在搞单点登录,第一次使用老出状况.以下是配置过程: 1.安 ...
- cocos2d-x Action
转自:http://codingnow.cn/cocos2d-x/775.html 从结构图可以看出,动作类的基类是CCAction,通过继承它可以实现很多种动作. CCFiniteTimeActio ...
- <转>使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机
准备 今天将cocos2d-x的示例项目tests编译到android真机运行,以及如何创建cocos2d-x的android项目. 打开cocos2d-x的tests项目,路径为:D:\cocos2 ...
- Java算法试题--猜字母/杀人游戏
题目例如以下: 把abcd-s共19个字母组成的序列反复拼接106次,得到长度为2014的串. 接下来删除第1个字母(即开头的字母a).以及第3个,第5个等全部奇数位置的字母. 得到的新串再进行删除奇 ...
- 从零开始学android开发-字符如何转换整形 string 转化为int
int i = Integer.parseInt(string);
- Web应用Word生成
前段时间接到一个Web应用自己主动生成Word的需求,现整理了下一些关键步骤拿来分享一下. 思路:(注:这里仅仅针对WORD2003版本号.其他版本号大同小异.) 由于WORD文件内部的数据及格式等是 ...
- jbpm入门样例
1. jBPM的简介 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储. 參考 http://www.jbos ...
- [ZZ]良好的编码习惯
1.以简洁明了的方式编写C程序.通常把这种程序编写方法称为KIS(“保持简洁”).不要用古怪的方式编写程序. 2.阅读所有的C版本手册.经常参考所用的C版本的手册能了解该版本的丰富的特点,并正确地使用 ...
- Java_生产者消费者模式
/* * To change this license header, choose License Headers in Project Properties. * To change this t ...