2019-07-15Mustache学习笔记

Mustache学习笔记

Mustache 是一款基于javascript 实现的模板引擎,类似于 Microsoft’s jQuery template plugin,但更简单易用,在前后端分离的技术架构下面,前端模板引擎是一种可以被考虑的技术选型,随着重型框架(AngularJS、ReactJS、Vue)的流行,前端的模板技术已经成为了某种形式上的标配,Mustache 的价值在于其稳定和经典:

主页:https://github.com/janl/mustache.js/

文档:https://mustache.github.io/mustache.5.html

1.出现的问题

在使用中会有可能在页面渲染时会出现{{xxx}}这种标签,虽然会被页面立即替换掉,但是对于用户呈现来讲,依然不太友好

2.具体使用方式

从git hub上获取相关的mustache.js文件,在页面的head标签内引用Jquery.js 和Mustache.js两个脚本文件

简介

3.渲染

渲染形式单一:var view = Mustache.render(template,obj);  

参数:一个是模板html,一个是数据源对象。 

view:一个返回值(渲染后的html )

例:

var obj={name:'<b>那年那夏</b>',age:'23'}

var template='我是{{name}},年龄{{age}}'

var view = Mustache.render(template,obj);

$('body').html(view);

结果:我是那年那夏,年龄23

4.mustache的思想

mustache的核心是标签和logic-less。从上面的代码中可以看到定义模板时,使用了{{name}}这样的标记,这就是mustache的标签,只不过它用{{}}替代了<>,以免跟html标签的<>混淆。logic-less,可以翻译为轻逻辑,因为在定义模板的时候不会用到if-else,不会有循环式的编码,一切都用标签来解决,它的标签非常简单,但是能应付所有场景,只要用以下几个标签几乎就能解决所有的问题:

{{prop}} 

{{{prop}}} 

{{#prop}}{{/prop}} 

{{^prop}}{{/prop}}

{{!prop}} 

{{> prop}}

5.mustache标签介绍

1){{person}}变量

如上面例子中可以直接使用

嵌套使用

var obj={ "name": { "first": "xx,", "last": "yy," }, "age": "23" }

var view={{name.first}} {{name.last}} {{age}}

输出:xx,yy,23

2){{{prop}}} 带有HTML的变量

在{{prop}}中的html会直接转义,如果不想转义则使用{{{name}}}或{{&name}}

如:var obj={name:'<b>那年那夏</b>',age:'23'}

var template='我是{{{name}}},年龄{{age}}'

var view = Mustache.render(template,obj);

$('body').html(view);

结果:我是<b>那年那夏</b>,年龄23

3){{#prop}}{{/prop}} 循环

1.遍历数组

数组循环的时候可以用.作为下标

var obj={ "arr": ["1", "2", "3", "4"] };

var template='{{#arr}}  {{.}}  {{/arr}}'

输出:1234

2.遍历对象

var obj={ "str": [ { "name": "xx," }, { "name": "yy," }, { "name": "zz" } ] };

var template='{{#str}}  {{name}}  {{/str}}'

输出xx,yy,zz

3,False和空的list

在以上代码块中,如果str这个key存在,并且有一个值是false或者一个空的列表,包含在块之间的元素不会做任何显示的.同样如果str是一个列表,如果它为空,标签内部的内容也是不会被显示出来的.

如:var obj={ “str”: false } ;

var view='xxx{{#str}yyy{{/str}}}'

输出xxx

4){{^prop}} {{/prop}}当 prop值为 null, undefined, false 时才渲染输出该区块内容。

如:var obj={ “str”: false } ;

var view='xxx{{^str}yyy{{/str}}}'

输出xxxyyy

5)判断使用{{#prop}}{{/prop}}{{^prop}} {{/prop}}

if else

{{#prop}} ... {{/prop}}

{{^prop}} ... {{/prop}}

布尔判断

当对象没有值时你可能不希望展示{{#prop}} ... {{/prop}}

数组的布尔判断

当一个数组没有任何值的时候,可能会希望不做任何的显示,所以需要这个判断{{#prop}} ... {{/prop}}

Lambdas

当Key的值是一个可以被调用的对象,譬如是一个函数或者一个lambda,该对象将会被调用并且传递标签包含的文本进去

var obj={  "name": "Willy",

  "prop": function(){   

                     return function(text){      return "<b>" + text + "</b>"    }

               }

}

var view={{#prop}} {{name}} is xxx. {{/prop}} 

输出

我们看到prop是一个可以被调用的函数他当标签使用的时候会被再次调用,并且包在其中的其他标签也会被转义执行,这个特性,可以用来做很多很多的事情.

6.{> prop}}Partials的使用

Partials 标签开始是以一个大于号开始,像这样{{> box}}.

Partials在运行期被渲染 (相对于编译期渲染而言),因此可以使用它来做一些递归,可以避免无限的循环.

例:

var tpl = "<h1>{{namme}}</h1> <ul>{{>msg}}</ul>" 

var partials = {msg: "{{#msg}}<li>{{sex}}</li><li>{{age}}</li><li>{{hobit}}</li>{{/msg}

var html = Mustache.render(tpl, data, partials);

//输出:

<h1>xiaohua</h1>

<ul>

    <li>female</li>

    <li>22</li>

    <li>reading</li>

</ul>

7) {{!prop}}  注释(没啥用

<h1>Today {{! ignore me }}</h1>

输出<h1>Today</h1>

8)核心方法

Mustache.parse(template);//预解析(可选步骤)  

Mustache.render(template, obj);

模板既然有好处,也有坏处。就是编译模板需要时间,所以在我们已知会使用某个模板的前提下,我们可以预先编译好这个模板,以便后面的使用。

参考说明:https://www.cnblogs.com/yaozhenfa/p/js_mustache.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,202评论 0 6
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,095评论 0 3
  • VUE介绍 Vue的特点构建用户界面,只关注View层简单易学,简洁、轻量、快速渐进式框架 框架VS库库,是一封装...
    多多酱_DuoDuo_阅读 2,687评论 1 17
  • 100个常用的javascript函数 1、原生JavaScript实现字符串长度截取 复制代码代码如下: fun...
    老头子_d0ec阅读 353评论 0 0
  • 一:认识jquery jquery是javascript的类库,具有轻量级,完善的文档,丰富的插件支持,完善的Aj...
    xuguibin阅读 1,703评论 1 7