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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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