mustache.js是一个模板引擎,为开发节省了大量的“人力”,对于初学者,我是从这篇 和这篇 博客接触的,算是对mustache有了初步认识,不得不承认自己还是菜鸟阶段还有太多东西要学,慢慢熟悉。

在初步了解mustache后,我仿照公司使用的技巧写了一个demo:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="C:\Users\Administrator\Desktop\mustache.js"> </script> <script id="emacleTempl" class="mustache-template" type="text/template">
<h1>标题:[[title]]</h1>
<p>下面是我的个人信息:</p>
<h2>姓名:[[name]]</h2>
<h2>年龄:[[age]]</h2>
<h2>身高:[[height]]</h2>
<h2>学校:[[school]]</h2>
<h3>工作:[[#job]] [[.]] [[/job]]</h3>
<h3>地址:[[#addres]]<p>城市:[[city]]<p>科室:[[zip]]<p>[[/addres]]</h3>
[[#edu]]
教育信息:我的学校是:[[school]] !!
[[/edu]]
</script>
</head>
<body>
<div id="d2"></div>
</body> <script type="text/javascript">
var tem=document.getElementById("emacleTempl").innerHTML;
var d2=document.getElementById("d2"); var data={
title:"个人资料",
name:"jim",
age:20,
height:180,
school:"辽宁工程技术大学大学",
addres:{
city:"北京",
atate:"朝阳",
zip:512
},
job:["java","js","css","html","ps"],
edu:true //true时加载,flase时不加载 }; var html = Mustache.render(tem,data); //渲染数据
d2.innerHTML=html; //把渲染结果插入空div中,显示 </script>
</html>

在demo里有几个关键点这里需要声明一下,第一就是代码中的第二个<script>标签,重点是它的type="text/template" 而不是“text/javascript”,没错就是让他不能正常识别为js代码,因为它内部本身就不是js,识别了反而会报错。它存放的是渲染模板,本打算单独成一个html文件的,但不利于查看,就写在一起了,我司的模板都是一个个html文件,文件里就一个<script type="text/template">标签。也就是说,网页是从模板中选择性加载的,怎样选择呢?那就是底部的js代码控制的,先看模板吧:

<script id="emacleTempl" class="mustache-template" type="text/template">
<h1>标题:[[title]]</h1>
<p>下面是我的个人信息:</p>
<h2>姓名:[[name]]</h2>
<h2>年龄:[[age]]</h2>
<h2>身高:[[height]]</h2>
<h2>学校:[[school]]</h2>
<h3>工作:[[#job]] [[.]] [[/job]]</h3>
<h3>地址:[[#addres]]<p>城市:[[city]]<p>科室:[[zip]]<p>[[/addres]]</h3>
[[#edu]]
教育信息:我的学校是:[[school]] !!
[[/edu]]
</script>

最后一个[[#edu]]为true时加载,flase时不加载,这就是所谓的选择性加载,下面看看控制加载的js代码吧:

<script type="text/javascript">
var tem=document.getElementById("emacleTempl").innerHTML;
var d2=document.getElementById("d2"); var data={
title:"个人资料",
name:"jim",
age:20,
height:180,
school:"辽宁工程技术大学大学",
addres:{
city:"北京",
atate:"朝阳",
zip:512
},
job:["java","js","css","html","ps"],
edu:true //true时加载,flase时不加载
}; var html = Mustache.render(tem,data); //渲染数据
d2.innerHTML=html; //把渲染结果插入空div中,显示 </script>

js代码定义了data,里面存着渲染信息,最后通过Mustache.render(tem,data)渲染,并把渲染的结果作为innerHTML插入到指定标签中,这样就实现了选择性加载,如果要更改数据只需更改data就行,基本原理就是这样,当然实际情况要比这复杂。一个模板成千上万行代码也是很常见的。同志仍需努力!

mustache模板渲染的基本原理的更多相关文章

  1. mustache模板技术

    一.简介Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档.当然不同的开发语言有不同模板引擎,如 Javascript 下的 Hog ...

  2. JS模板引擎-Mustache模板引擎使用实例1-表格树

    1 使用实例代码 1.jsp代码 <!DOCTYPE html> <html lang="zh-CN"> <head> <title> ...

  3. 【nodejs笔记3】Express基本用法,和路由控制,和模板渲染ejs

    1. 路由控制的工作原理 //routes/index.js中的代码//访问主页时,调用ejs模板引擎,渲染index.ejs模板文件,生成静态页面,并显示在浏览器中.router.get('/', ...

  4. python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器

    python3.5 manage.py runserver python Django教程 之模板渲染.循环.条件判断.常用的标签.过滤器 一.Django模板渲染模板 1. 创建一个 zqxt_tm ...

  5. Flask -- 静态文件 和 模板渲染

    静态文件 一般用于存放图片,样式文件(css, js等) 保存位置:包中或者文件所在目录创建一个 static 目录 访问:在应用中使用 /static/...即可访问 , 更好的方式是使用url_f ...

  6. 出位的template.js 基于jquery的模板渲染插件

    找了好几款基于jquery的模板渲染插件,无一感觉很难用(教程较少.绑定不统一),也可能我智商问题,比如jquery template.js .jtemplate.js. 然后在github上找到这一 ...

  7. Django中的模板渲染是什么

    首先建立一个页面 在views.py中增加一个方法 配置URL 如何实现的呢 这就是渲染,传递的数据不同显示的数据也不同.Django里的渲染引擎和Jinja的虽然不同但是语法基本通用.现在明白什么叫 ...

  8. Swagger结合mustache模板生成后台接口代码、以及前后台建模代码

    之前项目中使用的的thrift来建模,维护前后台模型以及rest接口,前台使用的是angular2: 但是使用thrift只能生成建模,后台的rest接口的Controller文件还是需要手动去写,一 ...

  9. thinkphp3.2.3模板渲染支持三元表达式

    thinkphp3.2.3模板渲染支持三元表达式 {$status?'正常':'错误'} {$info['status']?$info['msg']:$info['error']} 注意:三元运算符中 ...

随机推荐

  1. {转}Unity3d+Jenkins 自动编译iOS、Android版本(U3D远程自动打包工具)

    http://www.cnblogs.com/yinghuochong/archive/2013/09/01/3294940.html

  2. C++11 智能指针unique_ptr使用 -- 以排序二叉树为例

    用智能指针可以简化内存管理.以树为例,如果用普通指针,通常是在插入新节点时用new,在析构函数中调用delete:但有了unique_ptr类型的智能指针,就不需要在析构函数中delete了,因为当u ...

  3. 译:在C#中使用LINQ To SQL

    译文出处:http://www.codeproject.com/Tips/871938/LINQ-To-SQL-Using-Csharp 今天在这个话题中,我给大家分享一个在c#编程中非常有趣和十分有 ...

  4. C、C++编译,链接,extern链接

    //b.cpp #inlcude <iostream> void b() { std::cout<<"fun b"; } //a.cpp extern vo ...

  5. 读书笔记_Effective_C++_条款四十五:运用成员函数模板接受所有兼容类型

    比如有一个Base类和一个Derived类,像下面这样: class BaseClass {…}; class DerivedClass : public BaseClass {…}; 因为是父类与子 ...

  6. 解决错误: java.lang.NoClassDefFoundError: antlr/RecognitionException

    网络质量不好的情况下,访问maven.org网站下载jar包,很有可能下载的包不完整或损坏的(表面看不出来):所以,最好的办法就是-直接到maven网站下载,然后放到对应的.m2目录,然后eclips ...

  7. Swift3.0_注释,警告,todo的写法

    一. Swift3.0 不支持写Prama的注释了. 也不能打#warning了. 二. 取代方法 1. 注释: //MARK: - setter & getter 2.警告 //FIXME: ...

  8. IE下点击scrollbar会导致焦点移动到body

    现象 IE这货果然与众不同,当光标焦点在input时,点击同页面内其他区域的scrollbar,会导致焦点移动到body,从而触发绑定在input上的blur事件,如果input中的值与之前不同,甚至 ...

  9. CentOS6.5菜鸟之旅:安装ATI显卡驱动

    一.前言 自从安装了CentOS,我的显卡就没消停过,一直在彪高温而且噪音特别大,于是决定上网搜索解决办法.下面记录下来以供日后查阅. 二.安装fglrx driver(ATI/AMD 显卡的linu ...

  10. 【Beta阶段】团队源代码管理

    0. 快速上手与理解 如果你的团队来了一个新队员,有一台全新的机器,你们是否有一个文档,只要设置了相应的权限,她就可以根据文档,从头开始搭建环境,并成功地把最新.最稳定版本的软件编译出来,并运行必要的 ...