Mustache 使用说明
Mustache 使用说明
最近在升级SinGooCMS到MVC架构。管理前端使用了Mustache模板,把使用心得记录一下!
一、官网
http://mustache.github.io/
https://github.com/mustache/mustache.github.com
https://www.bootcdn.cn/mustache.js/
从上面网都能获取到Mustache.min.js
二、基本语法
{{keyName}}
{{#keyName}} {{/keyName}}
{{^keyName}} {{/keyName}}
{{.}}
{{<partials}}
{{{keyName}}}
{{!comments}}
Mustache的语法很简单,就上面几个,{{keyName}}读取属性值,{{{keyName}}}读取属性值且原样输出,即HTML不编码。{{#keyName}} {{/keyName}}用于遍历,{{^keyName}} {{/keyName}}反义数据,当keyName不存在、null值,false时起作用。
{{.}}用于遍历数组
{{!comments}} 注释
三、使用技巧
1)if-else
{{#name}}...{{/name}} 当name有值时显示
{{^name}}...{{/name}} 当name为null,undefined,甚至json数据里没有这个name字段时会显示
示例:
模板:
<div>{{name}}</div>
数据:
var json = {"result":{}};
此时渲染模板会报错,提示没有name属性。
模板改成如下,即使没有name也不会报错。这样添加和修改就可以共用一个模板了。
{{#result}}
<div>{{name}}</div>
{{/result}}
2)遍历
常用于显示异步列表。
var json={"result":{"data":[{"AdName":"广告1","AdType":"文本广告"}]},"pager":{}}
{{#data}}
<tr>
<td>{{AdName}}</td>
<input type="number" name="txtSort" value="{{Sort}}" id="txtSort" step="1" />
</tr>
{{/data}}
{{^data}}
<tr><td colspan='7'> 没有找到任何数据</td></tr>
{{/data}}
//渲染
Mustache.render(tmpl, json.result);
{{#data}}...{{/data}}对应json.result.data里面数据进行遍历。在没有值时显示{{^data}...{{/data}}的内容。
3)json扩展
mustache的逻辑处理很有限,所以在模板里进行判断是不可能的。比如下拉列表,需要判断当前选中就实现不了。
那就得在json中打主意。
<select name="ddlADType" id="ddlADType">
{{{droplist}}}
</select>
var json = @Html.Raw(ViewBag.InitData);
json.result.droplist=function(){ //扩展一个字段
var str="";
var arr=new Array("文本广告","图片广告","Flash广告","视频广告");
for(var i=0;i<arr.length;i++)
str+="<option value='"+i+"' "+(json.result.AdType==i?"selected='selected'":"")+" >"+arr[i]+"</option>";
return str;
};
渲染的效果如下,实现了选中状态
<select name="ddlADType" id="ddlADType">
<option value="0">文本广告</option>
<option value="1" selected="selected">图片广告</option>
<option value="2">Flash广告</option>
<option value="3">视频广告</option>
</select>
4)radio 和 checkbox数据绑定
由于没有if-else条件判断,对于表单组可以参照上面组织元素再输出。
对于单个表单。字段值为bool型可以用以下方法。
<input name="isaudit" type="checkbox" id="isaudit" class="common-check" {{#IsAudit}}checked="checked"{{/IsAudit}} />
5)列表显示有意义的描述
当json数据有AdType=0时,前台显示肯定没有意义。应该显示为“文本广告”。前端json可以做如上扩展的判断,也可以在后台进行处理。
//以下是json的部分需要替换成有意义的描述
Func<int, string> GetEnumDesc = (adType) =>
{
return dataJson.Replace("\"AdType\":" + adType + "", "\"AdType\":\"" + EnumUtils.GetEnumDescription((AdsType)adType) + "\"");
};
foreach (var item in Enum.GetValues(typeof(AdsType)))
{
dataJson = GetEnumDesc((int)item); //把数字转成枚举的文字描述
}
dataJson = new Regex(@" (\d+):(\d+):(\d+)").Replace(dataJson, ""); //时间部分不要了
dataJson = dataJson.Replace("\"IsAudit\":true", "\"IsAudit\":\"<span style='color:blue'>已审核</span>\"")
.Replace("\"IsAudit\":false", "\"IsAudit\":\"未审核\"");
Mustache 使用说明的更多相关文章
- javascript库之Mustache库使用说明
一.简单示例 代码: function show(t) { $("#content").html(t); } var view = { title: 'YZF', cacl: fu ...
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- 微信小程序技术分析:Mustache语法要点总结
小程序开发的wxml里,用到了Mustache语法.所以,非常有必要把Mustache研究下. 什么是Mustache?Mustache是一个logic-less(轻逻辑)模板解析引擎,它是为了使用户 ...
- “我爱背单词”beta版发布与使用说明
我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院 拒 ...
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
- Map工具系列-02-数据迁移工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- Map工具系列-03-代码生成BySQl工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- jQuery验证控件jquery.validate.js使用说明
官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...
随机推荐
- Java 8 字符串日期排序
public class ObjectDto implements Serializable { private static final long serialVersionUID = 858983 ...
- go run helper
# go run helper -a :强制编译相关代码,不论编译代码是否最新 -n :打印编译过程需要用到的命令,但不真正执行他们 -p n :并行编译,n为并行的数量 -v :列出被编译的代码包的 ...
- c++经典排序算法全集(转)
C++排序算法全集 排序算法是一种基本并且常用的算法.由于实际工作中处理的数量巨大,所以排序算法对算法本身的速度要求很高. 一.简单排序算法 由于程序比较简单,所以没有加什么注释.所有的程序都给出了完 ...
- Elasticsearch 2.4.1 Bigdesk 插件安装
简介: Elasticsearch 2.4.1 安装 bigdesk bigdesk 是一个 ES 集群监控工具,可以检测到集群状态.各节点信息,包括 JVM.Thread Pools.OS.Proc ...
- 使用 Zend_Studio 开发
之前一直用vim 写PHP, 总觉得IDE的一大堆没有用的插件非常麻烦,所以一直避免使用Zend_Studio.不过随着PHP的发展和框架的发展,以及个人的发展,最后还是回到的IDE的时代. 在使用Z ...
- CentOS 7 调整 home分区 扩大 root分区
总体过程: 把/home内容备份,然后将/home文件系统所在的逻辑卷删除,扩大/root文件系统,新建/home ,恢复/home内容 1.查看分区 df -h 2.备份home分区文件 tar c ...
- 30. Substring with Concatenation of All Words (String; HashTable)
You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...
- 在Action中操作域对象
----------------------siwuxie095 在 Action 中操作域对象 1.在 Action 中可以操作的域对象主要有三个: (1)Request (2)Session (3 ...
- 使用twised实现一个EchoServer
ProtocolsProtocols描述了如何以异步的方式处理网络中断时间,HTTP.DNS已经IMAP是应用应用层协议中的例子,Protocols实现了IProtocol接口,它饱和如下的方法 ma ...
- C语言Web service编程
一.简介 Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用 ...