在Javascript中 mustache.js是实现mustache模板系统。

Mustache是一种没有逻辑的模板语法。它可以应用于HTML、配置文件、源代码等任何地方。 它通过使用散列或对象中提供的值在模板中展开标记来工作。

我们称它为没有逻辑的模板,是因为它没有if语句、else子句和for循环,它只有标签。一些标签被替换为值或什么也没有或者一系列的值。

不能在模板中使用else if做逻辑判断,我们可以在数据传入之前对数据做逻辑操作。

我们在那使用mustache.js

你可以在任何可以使用JavaScript的地方使用mustache.js来渲染mustache模板。包括web浏览器、服务器环境(node)。
语法

  • 模板以包裹住内容,格式中写入的是模板的内容。 被替换的内容字段使用双花括号包裹起来"{{}}"
  • 插值表达式:双花括号{{}} 包裹替换的字段
  • {{#prop-name}}{{/prop-name}}用作for循环渲染,当prop-name的值为非空数组时,mustach不会遍历该数组,渲染出个数和该数组长度相等的DOM元素
  • 也可以用作if-else判断。{{#prop-name}}{{/prop-name}}和{{prop-name}}{{/prop-name}}两组标签结合使用,当prop-name的值存在且不为false时,会渲染{{#prop-name}}{{/prop-name}}的内容,否则渲染{{prop-name}}{{/prop-name}}的内容。
<script id="template" type="x-tmpl-mustache">
{{name}}
</script>
<script type="text/javascript">
var template = $("#template").html();
//name值为函数返回值
var r = Mustache.render(template,{
name:function(){
return 'abc' //abc会替换双花括号内name
}
})
//name值为字符串
var r = Mustache.render(template,{name:'wan'}) //字符串wan会替换双花括号内的name
</script>

我们注意到上面代码render的第二个参数都是一个对象,第二个参数我们通常都会使用对象类型,传入一个对象,在模板中书写对象属性,可以渲染出对象的值。 但也可以是其它类型如 数组、字符串类型、数字,如下:

<script id="template" type="x-tmpl-mustache">
{{.}}
</script>
<script type="text/javascript">
function loadUser(){
var template = $("#template").html();
var r = Mustache.render(template,'wan') //渲染出wan
//或
var r = Mustache.render(template,[,d,]) //渲染出1,d,3
//或
var r = Mustache.render(template,) //渲染出1
}
</script>

我们可以看到如果第二个参数是其它类型,那么在模板中双花括号内就用点.来表示,使用起来不方便。 一般在项目中很少会传入其它类型。

对象属性值为数组时 实现forEach遍历数组渲染DOM

//页面部分
<div id="target">Loading</div>
//模板
<script id="template" type="x-tmpl-mustache">
<ul>
{{#list}}
<li>
<span>{{name}}</span>
<span>{{age}}</span>
<span>{{job}}</span>
</li>
{{/list}}
</ul>
</script>
//js部分
<script type="text/javascript">
var template = $("#template").html();
var r = Mustache.render(template,{
list:[
{name:'wannianqing',age:,job:'The Front End'},
{name:'wangxiaosan',age:,job:'java'},
{name:'lixiaosi',age:,job:'The Front End'},
{name:'sunxiaowu',age:,job:'java'}
]
})
$("#target").html(r)
</script>

用作if-else,属性无论是显示还是隐式转换为boolean类型,true时渲染{{#prop-name}} false时渲染{{^prop-name}}

//页面部分
<div id="target">Loading</div>
//模板
<script id="template" type="x-tmpl-mustache">
{{#isShow}}一{{/isShow}}
{{^isShow}}二{{/isShow}}
</script>
//js部分
<script type="text/javascript">
var template = $("#template").html(); var r = Mustache.render(template,{isShow:true}); //isShow存在且为布尔值true时,显示 “一”
var r = Mustache.render(template,{isShow:false}); //isShow存在且为布尔值true时,显示 “二”
var r = Mustache.render(template,{}); //isShow不存在时,显示 “二”
var r = Mustache.render(template,{isShow:[]}); //isShow存在,为空数组时,显示 “二”
var r = Mustache.render(template,{isShow:undefined}); //isShow存在,为undefined时,显示 “二”
var r = Mustache.render(template,{isShow:null}); //isShow存在,为null时,显示 “二” $("#target").html(r)
</script>
实际使用

用一个唯一id的script标签包裹模板内容,type类型为text/template

<script id="template" type="text/template"></script>

使用原生javascript方法或者jquery方法获得唯一id的script标签的html内容

var template = document.getElementById('template').innerHTML.trim();
//或
var template = $("#template").html();

使用mustache的render方法处理模板后填充到目标位置

var rendered = Mustache.render(template,obj);
$('#target').html(rendered)

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body "loadUser()">
<div id="target">Loading</div> <script id="template" type="x-tmpl-mustache">
Hello {{}}~
<ul>
{{#list}}
<li>{{name}}</li>
{{/list}}
</ul>
</script>
<script type="text/javascript" src="js/jquery-2.1.0.min.js"></script>
<script type="text/javascript" src="js/mustache.js"></script>
<script type="text/javascript">
function loadUser(){
var template = $("#template").html(); var obj = {
list:[
{name:'wan'},
{name:'wan'},
{name:'wan'}
]
}
var rendered = Mustache.render(template,obj);
$('#target').html(rendered)
}
</script>
</body>
</html>

上面示例是内部文件使用mustache模板引擎,我们还可以引入外部模板引擎来渲染页面。

首先我们在HTML文档中引入jquery.mustache.js文件配合mustache使用,jquery.mustache.js是jQuery做了一层封装,提供了集中方法让我们更方便使用mustache做模板渲染。 此处我们使用它的.load方法从指定路径加载模板文件,加载成功后使用$.Mustache.render()处理模板渲染页面。

$.Mustache
.load('./mustache/demo2.mustache')
.done(function(){
$("#target").html($.Mustache.render('demo2',{name:'wan'}))
})
下面我们来看一个完整的案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="target">Loading</div> <script type="text/javascript" src="js/jquery-2.1.0.min.js"></script>
<script type="text/javascript" src="js/mustache.js"></script>
<script type="text/javascript" src="js/jquery.mustache.js"></script>
<script type="text/javascript">
//要传入的数据
var objData = {
list:[
{name:'wannianqing',age:,job:'The Front End'},
{name:'wangxiaosan',age:,job:'java'},
{name:'lixiaosi',age:,job:'The Front End'},
{name:'sunxiaowu',age:,job:'java'}
]
}
//加载模板方法
function loadTemplateMustache(mustacheName,targetId,templateId,data){
//模板路径
var mustacheDir = './mustache/'+mustacheName+'.mustache';
//渲染目标容器
var targetContainer = $(targetId);
if(targetContainer.length > ){
$.Mustache
.load(mustacheDir) //加载模板文件
.done(function(){
//渲染模板
renderTarget(targetContainer,templateId,data)
})
}
}
//渲染模板方法
function renderTarget(dom,templateId,data){
var el = dom;
el.html('');
el.append($.Mustache.render(templateId,data));
} loadTemplateMustache('demo4','#target','template',objData)
</script>
</body>
</html>
————————————————
版权声明:本文为CSDN博主「lucky万万」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_30019329/article/details/87895623

js模板引擎mustache介绍及实例的更多相关文章

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

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

  2. Js模板引擎mustache

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

  3. 前端JS模板引擎Mustache.js的用法

    Mustache.js在前端是一个非常强大的模板 Mustache用法参考

  4. js模版引擎Mustache介绍

    Mustache通常被称为JavaScript模板的基础.另一个流行的解决方案Hanldebars实际上就是基于Mustache构建而成的.这并不意味着Mustache是一个不好的模板解决方案. 下面 ...

  5. vue系列---Mustache.js模板引擎介绍及源码解析(十)

    mustache.js(3.0.0版本) 是一个javascript前端模板引擎.官方文档(https://github.com/janl/mustache.js) 根据官方介绍:Mustache可以 ...

  6. js模板引擎介绍搜集

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

  7. 模板引擎mustache.js

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

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

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

  9. 使用新一代js模板引擎NornJ提升React.js开发体验

    当前的前端世界中有很多著名的开源javascript模板引擎如Handlebars.Nunjucks.EJS等等,相信很多人对它们都并不陌生. js模板引擎的现状 通常来讲,这些js模板引擎项目都有一 ...

随机推荐

  1. Picture POJ - 1177 线段树+离散化+扫描线 求交叉图像周长

    参考  https://www.cnblogs.com/null00/archive/2012/04/22/2464876.html #include <stdio.h> #include ...

  2. 在IE8的基础上安装IE11

    安装包下载 链接:https://pan.baidu.com/s/1WAuyMg_SrfVa0wLjoop5Jw   提取码:nh1r 安装方式 先运行 - EIE11_ZH-CN_WOL_WIN76 ...

  3. JN_0012:win10的开机启动文件夹

    1,登录所有用户时都能开机启动的启动文件夹.所有用户通用的开机启动文件夹地址是 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp ...

  4. 2019版本kali linux-3 系统安装与基本调试

    本次的实验环境是: kali linux -3 kali linux 全版本地址: http://old.kali.org/kali-images/ 楼主的主系统是:kali linux  如果想学好 ...

  5. 解决officeOnline文档预览服务器只能域名提交的限制Redirect

    此项目是解决officeOnline文档预览只能用域名提交的限制 http://officeOnline文档预览域名或IP/op/generate.aspx // 微软原生页面 创建链接后会生成全屏预 ...

  6. 网站后门shell-----eval

    我们先来看看网站被攻击的代码: <?php error_reporting(E_ERROR); unlink('user.php'); unlink('../member/login.php') ...

  7. 2019kali中文乱码

    1.安装KALI2019.4版本后会出现乱码问题 2.更新国内源,使用vim编辑器修改:vim /etc/apt/sources.list添加 #清华大学 [更新源]    deb https://m ...

  8. 第一个,net core项目,一起入门 !!!

    最近项目上开始使用.net core,新的项目,熟悉的东西比较多,现在花点时间来梳理一下,重头开始搭建一个.net core项目.哈哈,这个相对老手来说,估计会觉得小儿科,没事,也就当一次分享总结罢了 ...

  9. SpringBoot整合WEB开发--(八)启动任务系统

    简介: 有一些特殊的任务需要在系统启动时执行,例如配置文件的加载,数据库初始化等操作,如果没有使用SpringBoot,这些问题可以在Listener中解决.SpringBoot提供了两种解决方案:C ...

  10. JXLS支持嵌套循环语法的数据导出说明

    今天在试验用Jxls 2.0导出嵌套循环数据时,第二层数据一直没有成功,最后确认是数据源结构不正确所致,现将这两种数据格式进行说明:假设模板中批注有这样两条循环语法: <jx:each(item ...