背景

最近使用ELK的sentinl进行告警配置,sentinl的邮件通知支持mustache,借此机会学习了mustache相关知识,记录在此。

mustache的思想

mustache的核心是标签和logic-less.

标签: 定义模板的时候,使用了{{name}}、{{#systems}}{{/systems}}标记. 这就是mustache的标签,只不过用{{}}替代了<>,以免和html标签的<>混淆.

Logic-less:轻逻辑,因为在定义模板的时候不会使用if-else,不会有循环式编码,一切都用标签来解决.

标签包含:

  • {{prop}}: 将数据源对象上prop属性对应的值,转换成字符串输出.
  • {{{prop}}} ——不进行特殊字符转义,保持内容原样输出
  • {{#prod}}{{/prop}}
  • {{^prop}}{{/prop}}
  • {{.}} ——表示枚举,可以循环输出整个数组
  • {{>partials}} ——以>开始表示子模块
  • {{!comments}} ——注释

{{prop}}标签

mustache渲染{{prop}}标签的逻辑:

1)如果prop引用的值上null或者undefined,则渲染成空串;

2)如果prop引用的是一个函数,则在渲染的时候自动执行这个函数,并把函数返回值作为渲染结果.

3)其他场景,直接把prop引用的值转换成字符串作为渲染结果.

默认情况下,mustache在渲染prop时,都是对prop的原始值进行url编码或者html编码之后再输出,所以会把"\"转成html实体符.

console.log(Mustache.render(tpl1, {
prop: function () {
return 'it\'s a fun'
}
}));//-it's a fun-

如果要阻止这种编码行为,只要把标签改成{{{prop}}}就可以.

{{#prop}}{{/prop}}标签

这对标签作用非常大,可以同时完成if-else和for-each以及动态渲染的模版功能. 在这对标签之间,可以定义其他模板内容,嵌套所有标签.

1)if-else渲染

只有prop属性在数据源对象上存在,并且不为falsy值(javascript6个falsy值:null, undefined, NaN, 0, false, 空字符串), 并且不为空数组的情况下, 标签之间的内容才会被渲染,否则都不会被渲染.

prop属性引用的是一个函数的时候,{{#prop}}会自动调用这个函数,并把函数的返回值作为if-else渲染逻辑的判断依据,也就是如果函数返回的是falsy值或者是空数组的时候,这对标签之间的内容还是不会显示.

2)for-each渲染

当prop属性引用的是一个非空数组时,这对标签之间的内容将会根据数据大小进行迭代,并且当数组元素为对象时,还会把该对象作为每一次迭代的上下文,以便迭代时的标签可以直接引用数组元素上的属性.

3)动态渲染

当prop属性所引用的是一个函数, 并且这个函数的返回值还是一个函数的话, mustache会再次调用这个返回的函数,并给它传递2个参数:text表示原来的目标内容,render表示mustache内部的执行渲染的对象, 以便在这个函数内容可以通过render对象结合原来的模版内容,自定义渲染的逻辑,并且把函数的返回值作为渲染结果(这个返回值渲染的逻辑根{{prop}}标签完全一样).

{{^prop}}{{/prop}}标签

这对标签,与{{#prop}}{{/prop}}的if-else渲染执行相反逻辑,即只有在prop属性不存在或者引用的是一个falsy值,或者是空数组才会显示标签之间的内容.

详情参考

Javascript模版引擎mustache.js简介的更多相关文章

  1. 探究Javascript模板引擎mustache.js使用方法

    这篇文章主要为大家介绍了Javascript模板引擎mustache.js使用方法,mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后 ...

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

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

  3. 模板引擎mustache.js

    Javascript模板引擎mustache.js详解   阅读目录 1. 从一个简单真实的需求讲起 2. mustache的用法 3. mustache的思想 4. {{prop}}标签 5. {{ ...

  4. js模版引擎handlebars.js实用教程

    js模版引擎handlebars.js实用教程 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的 ...

  5. JavaScript模板引擎Template.js使用详解

    这篇文章主要为大家详细介绍了JavaScript模板引擎Template.js使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下   template.js 一款 JavaScript 模板引 ...

  6. 简单JavaScript模版引擎优化

    在上篇博客最简单的JavaScript模板引擎 说了一下一个最简单的JavaScript模版引擎的原理与实现,作出了一个简陋的版本,今天优化一下,使之能够胜任日常拼接html工作,先把上次写的模版函数 ...

  7. Javascript模版引擎简介

    回顾 Micro-Templating 出自John Resig 2008年的一片文章,以及其经典实现: // Simple JavaScript Templating // John Resig - ...

  8. javascript模板引擎Mustache

    Mustache(英文本意:触须,胡须)是基于JavaScript实现的模版引擎,类似于JQuery Template,但是这个模版更加的轻量级,语法更加的简单易用,很容易上手. 下载:https:/ ...

  9. JavaScript模板引擎artTemplate.js——为什么使用模板引擎?

    作为一个工作一年的菜鸟,在公司做了几个外包项目,也接触到了不同形式的web开发.其实也没多少,就是javaweb开发和HTML5移动开发,这两者在页面展示的时候的解决方案还是有所不同的. 1.vo+e ...

随机推荐

  1. sql server I/O硬盘交互

    一. 概述 sql server作为关系型数据库,需要进行数据存储, 那在运行中就会不断的与硬盘进行读写交互.如果读写不能正确快速的完成,就会出现性能问题以及数据库损坏问题.下面讲讲引起I/O的产生, ...

  2. mysql 开发基础系列3 日期数据类型

    日期类型 如果要用来表示年月日,通常用DATE 来表示. 如果要用来表示年月日时分秒,通常用DATETIME 表示. 如果只用来表示时分秒,通常用TIME 来表示. TIMESTAMP表示格式 :YY ...

  3. 刷完500道BAT面试题,我能去面试大厂了吗?

    面试之前先刷几篇面经,或者做几道热门面试题,想必是大家很熟悉的一种复习方式了,就像我们当年经常做五年高考三年模拟一样.但是可不要把面试题和面经当成你的主要复习方式,它只是锦上添花,绝非雪中送炭! 壹面 ...

  4. 面试必备技能-HiveSQL优化

    Hive SQL基本上适用大数据领域离线数据处理的大部分场景.Hive SQL的优化也是我们必须掌握的技能,而且,面试一定会问.那么,我希望面试者能答出其中的80%优化点,在这个问题上才算过关. Hi ...

  5. java jdb 调试

    [hadoop@hadoop-01 ~]$ javac -help Usage: javac <options> <source files> where possible o ...

  6. MySql的创建时间和修改时间

      在创建时间字段的时候 DEFAULT CURRENT_TIMESTAMP表示当插入数据的时候,该字段默认值为当前时间 ON UPDATE CURRENT_TIMESTAMP表示每次更新这条数据的时 ...

  7. python模块之random

    python的随机数模块为random模块,可以产生随机的整数或浮点数.但是这是伪随机数,python解释器会维护一些种子数,然后根据算法算出随机数.linux维护了一个熵池,这个熵池收集噪音的信息, ...

  8. Java并发(二)—— 并发编程的挑战 与 并发机制的底层原理

    单核处理器也可以支持多线程,因为CPU是通过时间片分配算法来循环执行任务 多线程一定比单线程快么?不一定,因为线程创建和上下文切换都需要开销. 如何减少上下文切换 无锁并发编程 CAS算法 使用最少线 ...

  9. [转]MySQL忘记root密码解决方法

    本文转自:https://www.cnblogs.com/wxdblog/p/6864475.html 今天重新装了一遍MySQL,因为用的是免安装的,所以需要重新设置密码,然后我一通,结果搞得自己也 ...

  10. [转]BTC RPC API GetTransaction

    本文转自: GetTransaction GetTransaction gettransaction调用获取指定钱包内交易的详细信息.该调用需要节点 启用钱包功能. 参数 TXID:要查看详情的交易I ...