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 使用说明 转载 ...
随机推荐
- Unity容器声明周期管理
Having said that, here is a solution that you can use with the Unity container: Create some custom a ...
- 符合RESTful规范的API
统一使用的utils,serializers: class BaseResponse: def __init__(self): self.code = 1000 self.data = None se ...
- Linux nohup和&的功效
nohup和&究竟有啥区别?不少同学进行了回复,但并不是所有同学都理解得全对,今天把自己挖的坑自己填了. 测试代码如下: 是一个输出hello与循环轮数的死循环程序,每输出一行就休眠1秒. 使 ...
- 自定义Hibernate Validator约束
定义注解 实现一个只能输入指定状态的约束条件 import javax.validation.Constraint; import javax.validation.Payload; import j ...
- springBatch学习 batch的使用方式(5)
首先讲一下batch框架提供的一组job执行的api 如下图 说明: 应用场景 包含三种 标准的web ,定时任务调度,命令行 1.命令行 通过命令行在单独的jvm中调用 进行批处理作业 spring ...
- to_char 函数将小数点舍掉的解决办法
to_char(val,'0.9') 9 代表一个数字 0 强制显示0 $ 放置一个$符 L 放置一个浮动本地货币符 . 显示小数点 , 显示千位指示符
- Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 是由 ...
- css常用属性初总结:font
平时在做项目时,UX常说的一句话就是“这里的字体不对吧,字体大小也不太对,你们前端有没有按规范来”,今天,我们就一起来看看这折磨人的font属性. 字体属性font-family 允许值 系列名 初始 ...
- Apt-Cacher-ng 搭建缓存服务器
docker pull minimum2scp/apt-cacher-ng docker run -d -p 3142:3142 --name=cache -e ACNG_BACKENDS_DEBIA ...
- python's decorator&wrapper
[python's decorator&wrapper] decorator A function returning another function, usually applied as ...