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

  1. javascript库之Mustache库使用说明

    一.简单示例 代码: function show(t) { $("#content").html(t); } var view = { title: 'YZF', cacl: fu ...

  2. Atitit.项目修改补丁打包工具 使用说明

    Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...

  3. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

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

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

  5. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院  拒 ...

  6. Oracle 中 union 和union all 的简单使用说明

    1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...

  7. Map工具系列-02-数据迁移工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  8. Map工具系列-03-代码生成BySQl工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  9. jQuery验证控件jquery.validate.js使用说明

    官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...

随机推荐

  1. SpringBoot入门篇--对于JSON数据的返回以及处理二

    我们在进行开发的过程的难免会进行对象的返回,比如一个用户对象User,以及一个集合list,Map等等.在这篇博客中我们就是需要学习一下怎么对一个对象中某些属性的处理.需要补充的一点就是SpringB ...

  2. Python之单元测试框架unittest

    创建class继承unittest,每一个测试用例是以test开头的函数,先执行setup,然后用例按照字母的顺序执行,然后执行teardown import unittest class demo( ...

  3. MySQL:Can't connect to mysql server 10038

    1.防火墙高级设置 2.入站规则,新建规则 3.选择端口 4.输入MySQL端口例如'3306' 5.允许连接 6.下一步 7.自定义规则名称和描述,完成之后重新连接即可.

  4. windows中dos命令指南

    CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本)chcp 修改默认字符集chcp 936默认中文chcp 650011. appwiz.c ...

  5. three3D地图

    终于闲下来了,前段时间做了个项目,高精度精准定位系统,用到了three3D地图 听起来是不是很炫酷?其实并不难.先把部分代码附上(文件比较多,只粘贴部分的) $(function () {     i ...

  6. c# 数据集调试工具插件

    DataSetSpySetup,调试期查看dataset数据集的记录内容, Debug DataSet

  7. parentNode,parentElement,offsetParent

    offsetParent直接的将是影响元素位置的上级element,而parentElement与位置显示无关时dom中的上级element. 例如: <BODY> <div sty ...

  8. 容器网络之 veth设备

    创建命名空间 # ip netns add mhc # ip link show1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue ...

  9. 04-SSH综合案例:环境搭建之jar包引入

    刚才已经把表关系的分析已经分析完了,现在呢就先不去创建这个表,写到哪儿的时候再去创建这个表. 1.4 SSH环境搭建: 1.4.1 第一步:创建一个web项目. 1.4.2 第二步:导入相应jar包. ...

  10. 在Action中获取表单提交数据

    -----------------siwuxie095 在 Action 中获取表单提交数据 1.之前的 Web 阶段是提交表单到 Servlet,在其中使用 Request 对象 的方法获取数据 2 ...