javascript/jquery模板引擎——Handlebars初体验
Handlebars.js下载地址:http://handlebarsjs.com/
最近自己在建一个站,采用完全的前后端分离的方式,现在正在做前端的部分。其中有项功能是需要ajax调用后端接口,返回json数据后要动态的插入数据。但是一开始我自己是用最"传统"的通过js拼接html字符串,然后再用jq插入到页面中的方式。比如说下面的这个例子,我要显示一个个人信息卡:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Index</title>
<script src="js/jquery.js"></script>
<style>
.person {
font-size:40px;
float:left;
padding:20px;
margin:30px;
background-color:pink;
}
</style>
</head> <body>
<div class = "person" id="person_info">
</div>
</body> <script>
var data = {
name:'约翰莫里森',
home:'美国',
job:'摔跤手'
}; var str = "";
str += "<div>姓名:" + data.name + "</div>";
str += "<div>出生地:" + data.home + "</div>";
str += "<div>职业:" + data.job + "</div>"; $('#person_info').html(str);
</script>
</html>
这里我得用自己"手动"拼接html字符串,况且这只是一个极其简单的例子,如果标签之间的嵌套、属性复杂的话,这种方式写起来相当的麻烦,且标签间没有层次结构,可读性和维护性极差。
后来偶然在个地方了解到了模板引擎,从此这种工作一下简便了许多! 先看下用Handlebars完成上面的例子是如何操作的:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Handlebars</title>
<script src="js/jquery.js"></script>
<script src="js/handlebars.js"></script>
<style>
.person {
font-size:40px;
float:left;
padding:10px;
margin-left:30px;
background-color:pink;
}
</style>
</head> <body>
<div id = "person_info">
<div class = "person">
<div>姓名:{{name}}</div>
<div>出生地:{{home}}</div>
<div>职业:{{job}}</div>
</div>
</div>
</body> <script>
var data ={
name:'约翰莫里森',
home:'美国',
job:'摔跤手'
}; var tmpl = $('#person_info').html(); var func = Handlebars.compile(tmpl); var result = func(data); $('#person_info').html(result);
</script> </html>
先从最下面的js代码讲起,核心代码就这四句:
var tmpl = $('#person_info').html();
var func = Handlebars.compile(tmpl);
var result = func(data);
$('#person_info').html(result);
第一行的 var tmpl = $('#person_info').html(); 就只是基本的jq语法;<body>中<div id="person_info">块中的就是html模板,这里取得了该div块下的html模板内容(对象tmpl)。此时如果用console.log(tmpl)打印该对象的话,得到的内容是
<div class = "person">
<div>姓名:{{name}}</div>
<div>出生地:{{home}}</div>
<div>职业:{{job}}</div>
</div>
用两个大括号括起来的变量名会在后面 向函数传入数据(下面会提到) 时进行匹配。
第二行 var func = Handlebars.compile(tmpl); 通过Handlebars的compile()对刚刚取得的html模板进行预编译,返回的是一个函数(现在对象func即为该函数)。
var result = func(data); 这个函数带有一个参数,该参数为用以匹配模板用的数据。我这里事先写死一个数据对象data,然后传入该函数内。返回值是匹配好的html内容,打印出来就是 :
<div class = "person">
<div>姓名:约翰莫里森</div>
<div>出生地:美国</div>
<div>职业:摔跤手</div>
</div>
最后用jq将内容插入到页面中: $('#person_info').html(result);
如果有多项数据需要展示,则需要用到{{#each this}} {{/each}}。 语法类似标签,所以要注意别漏了闭合标签{{/each}}。 {{#each this}} ... {{/each}}中间的内容是模板。this 则是指传入函数的数据data。 用在实现上述例子的代码如下:
<body>
<div id = "person_info">
{{#each this}}
<div class = "person">
<div>姓名:{{name}}</div>
<div>出生地:{{home}}</div>
<div>职业:{{job}}</div>
</div>
{{/each}}
</div>
</body> <script>
var data =[{
name:'约翰莫里森',
home:'美国',
job:'摔跤手'
},
{
name:'Faker',
home:'韩国',
job:'英雄联盟职业选手'
}]; var tmpl = $('#person_info').html();
var func = Handlebars.compile(tmpl);
var result = func(data);
$('#person_info').html(result);
</script>
如果对象间所包含的数据域有个别不同,则需要分支语句进行判断 即{{#if xxx}} {/if}}。 用例如下:
<body>
<div id = "person_info">
{{#each this}}
<div class = "person">
<div>姓名:{{name}}</div>
<div>出生地:{{home}}</div>
<div>职业:{{job}}</div>
{{#if life}}
<div>生涯经历:</div>
<ul>
{{#each life}}
<li>{{this}}</li>
{{/each}}
</ul>
{{/if}}
</div>
{{/each}}
</div>
</body> <script>
var data =[{
name:'约翰莫里森',
home:'美国',
job:'摔跤手'
},
{
name:'Faker',
home:'韩国',
job:'英雄联盟职业选手',
life:['S3世界总冠军','S4世界总冠军','S5世界总冠军']
}]; var tmpl = $('#person_info').html();
console.log(tmpl);
var func = Handlebars.compile(tmpl);
var result = func(data);
$('#person_info').html(result);
</script>
最后再附上一篇关于Handlebars语法比较详细的介绍:http://www.ghostchina.com/introducing-the-handlebars-js-templating-engine/
javascript/jquery模板引擎——Handlebars初体验的更多相关文章
- Handlebars的基本用法 Handlebars.js使用介绍 http://handlebarsjs.com/ Handlebars.js 模板引擎 javascript/jquery模板引擎——Handlebars初体验 handlebars.js 入门(1) 作为一名前端的你,必须掌握的模板引擎:Handlebars 前端数据模板handlebars与jquery整
Handlebars的基本用法 使用Handlebars,你可以轻松创建语义化模板,Mustache模板和Handlebars是兼容的,所以你可以将Mustache导入Handlebars以使用 Ha ...
- 10 个强大的JavaScript / jQuery 模板引擎推荐
模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档.由于在开发过程中,网站或应用程序的界面与数据实现分离,大大提升了开发效率,良好的设计也使得代码重用变得更加容易. 本文 ...
- 【阿里云产品公测】云引擎ACE初体验
作者:阿里云用户蓝色之鹰 :RYYjmG5; 来投票支持我把=i2]qj\ 序号2. [阿里云产品公测]云引擎ACE初体验:作者:蓝色之鹰 e(OKE7 序号10.[阿里云产品公测]结构化数据服 ...
- Javascript模板引擎handlebars使用实例及技巧
转:http://rfyiamcool.blog.51cto.com/1030776/1278620 我们在开发的时候针对DOM操作,用简单的JS应用来说不成问题,但如果你对视图的每次更新都需要对我文 ...
- JavaScript模板引擎Handlebars
Handlebars模板库简单介绍 Handlebars是JavaScript一个语义模板库,通过对view(模板)和data(ajax请求的数据,一般是json)的分离来快速构建Web模板.它采用& ...
- JS模板引擎handlebars.js的简单使用
handlebars.js的使用 首先我们要明白handlebars.js是干什么用的,我们知道使用jsp很麻烦, 于是我们开始使用freemarker等模板引擎,但这个只是针对服务器端来解 析的,那 ...
- day12—jQuery ui引入及初体验
转行学开发,代码100天——2018-03-28 按照所下载教学视频,今天已进行到jQuery UI的学习中.注:本人所用教学视频不是太完整,介绍的内容相对简单,有些只是带过.其他时间中,仍需继续针对 ...
- 关于模板引擎handlebars.js基本用法
说明:模板引擎主要针对于渲染DOM,取代了字符串拼接,用下面的代码亲测handlebars模板引擎比字符串拼接渲染DOM慢了20ms, 这里配置一个在线DEMO,简单说明下handlebars.js的 ...
- JS 模板引擎 Handlebars.js 中文说明
Handlebars 为你提供了一个可以毫无挫折感的高效率书写 语义化的模板 所必需的一切. Mustache 模板和 Handlebars 是兼容的,所以你可以把Mustache模板拿来导入到Han ...
随机推荐
- Java 编程下 Eclipse/myeclipse 如何设置单行代码显示的最大宽度
http://www.cnblogs.com/sunzn/archive/2013/03/30/2990191.html 或 http://zhidao.baidu.com/link?url=67uy ...
- 去BAT,你应该要看一看的面试经验总结
我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的. 先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理.我本人 ...
- int内部方法释义
python基本数据类型包括:int.str.list.tuple.dict.bool.set(),一切事物都是对象,对象由类创建 1. bit_length:返回数字占用的二进制最小位数 def b ...
- 【转】关于RabbitMQ
1 什么是RabbitMQ? RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不 ...
- Python+selenium(Autolt实现上传)
AutoIt是一个使用类似BASIC脚本语言的免费软件,被设计用来进行Windows GUI的自动化测试.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务. 此次小编介绍的是利用Auto ...
- ASP.NET MVC WebAPI请求
基础: 首先,先创建一个“ASP.NET 空Web应用程序” : 然后添加对 “System.Web.Http” 和 “System.Web.Http.WebHost” 的引用: 再添加对“Syste ...
- HDU 4499
题目大意: N*M的棋盘上摆了一些棋子,在剩余位置上尽可能多的摆上炮,使所有炮不能互吃 dfs+回溯 #include <iostream> #include <cstdio> ...
- [Vijos1512] SuperBrother打鼹鼠 (二维树状数组)
传送门 直接搞就行. 注意下表re从零开始,而树状数组搞不了0,所以统一增加一个偏移量1. (话说数据随机是什么鬼?) # include <iostream> # include < ...
- POJ1450:Gridland 【杂题】
题目大意:先给出了TSP的背景,然后给出一个n*m的单位格点的图,图中除边缘上的点与八个方向的点有边连接,距离为欧拉距离,求从左上角出发的TSP 思路:从水题列表中看到的题,但看一开始给出的backg ...
- SQL SERVER 2012 第三章 使用INSERT语句添加数据
INSERT [TOP (<expression>) [PERCENT] [INTO] <tabular object>[(column list)][OUTPUT <o ...