| 涉及知识点
|
|
headlebars介绍
Handlebars 是 JavaScript 一个语义模板库,通过对view和data的分离来快速构建Web模板。它采用"Logic-less template"(无逻辑模版)的思路,在加载时被预编译,而不是到了客户端执行到代码时再去编译, 这样可以保证模板加载和运行的速度。Handlebars兼容Mustache,你可以在Handlebars中导入Mustache模板。
下载与安装
1、下载handlebars.js文件在页面中直接引用
2、通过npm下载,require('handlebars')直接引用
使用Handlebars
<!-- 编译模板后输出的位置 -->
<div id="tableList"></div>
<!-- 定义的模板 -->
<script id="table-template" type="text/x-handlebars-template">
{{date.year}} 年 {{date.month}} 月 {{date.day}} 日 <br>
<table>
{{#each person}}
<tr>
<td>姓名:{{name}}, 年龄:{{age}}</td>
</tr>
{{/each}}
</table>
</script>
<!--插件引用-->
<script src="js/lib/zepto.js"></script>
<script src="js/lib/handlebars.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
// 模拟的json对象
var data = {
date: {
year: '2016',
month: '12',
day: '26'
},
person: [
{name: 'siguang', age: 20},
{name: 'lulu', age: 20},
{name: 'haha', age: 20},
{name: 'heihei', age: 20}
]
}
// 预编译模板
var myTemplate = Handlebars.compile($("#table-template").html());
//将json对象用刚刚注册的Handlebars模版封装,得到最终的html,插入到基础table中。
$('#tableList').html(myTemplate(data));
});
</script>
handlebars语句
1、{{#each 对象 }} 循环数据
<script id="table-template" type="text/x-handlebars-template">
{{#each student}}
<tr>
<td>{{name}}</td>
<td>{{sex}}</td>
<td>{{age}}</td>
</tr>
{{/each}}
</script>
2、{{#each }} 嵌套
{{#each this}} each中的this
<!-- 定义的模板 -->
<script id="table-template" type="text/x-handlebars-template">
{{#each this}}
{{#each info}}
<!-- 这里取name 使用../到上一层来取, info数组内容使用this来输出 -->
{{../name}}的{{this}}<br>
{{/each}}
{{/each}}
</script>
<script src="js/lib/zepto.js"></script>
<script src="js/lib/handlebars.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
//模拟的json对象
var data = [
{
"name":"张三",
"info":[
"眼睛",
"耳朵",
"鼻子"
]
},
{
"name":"李四",
"info":[
"爸爸",
"妈妈",
"妻子"
]
}
];
var myTemplate = Handlebars.compile($("#table-template").html());
$('#dataList').html(myTemplate(data));
});
</script>
3、@index 访问父级索引
<script id="table-template" type="text/x-handlebars-template">
<table>
{{#each this}}
<tr>
<td>{{addOne @index}}.</td>
<td>{{name}}</td>
<td>{{sex}}</td>
<td>{{age}}</td>
</tr>
{{/each}}
</table>
</script>
<!--进行数据处理、html构造-->
<script type="text/javascript">
var data = [
{
name: "张三",
sex: "男",
age: 35
},{
name: "李四",
sex: "男",
age: 23
},{
name: "甜妞",
sex: "女",
age: 18
}
];
// 注册索引+1的helper
var handleHelper = Handlebars.registerHelper("addOne",function(index){
//返回+1之后的结果
return index+1;
});
//解析模版
var handle = Handlebars.compile($("#table-template").html());
//生成html
var html = handle(data);
//插入到页面
$("#dataList").append(html);
</script>
4、#with 循环时进行到某一个上下文
<script id="table-template" type="text/x-handlebars-template">
<table>
{{#each this}}
<tr>
<td>{{name}}</td>
<td>{{sex}}</td>
<td>{{age}}</td>
<td>
<!-- 这里通过 #with 直接找到favorite数组 -->
{{#with favorite}}
{{#each this}}
<p>{{name}}</p>
{{/each}}
{{/with}}
</td>
</tr>
{{/each}}
</table>
</script>
<!--进行数据处理、html构造-->
<script type="text/javascript">
$(document).ready(function() {
//模拟的json对象
var data = [
{
"name": "张三",
"sex": "0",
"age": 18,
"favorite":
[
{
"name":"唱歌"
},{
"name":"篮球"
}
]
},
{
"name": "李四",
"sex": "0",
"age": 22,
"favorite":
[
{
"name":"上网"
},{
"name":"足球"
}
]
},
{
"name": "妞妞",
"sex": "1",
"age": 18,
"favorite":
[
{
"name":"电影"
},{
"name":"旅游"
}
]
}
];
// 注册一个Handlebars模版,通过id找到某一个模版,获取模版的html框架
var myTemplate = Handlebars.compile($("#table-template").html());
// 将json对象用刚刚注册的Handlebars模版封装,得到最终的html,插入到基础table中。
$('#dataList').html(myTemplate(data));
});
</script>
5、{{#if }} 判断
<script id="table-template" type="text/x-handlebars-template">
{{#each student}}
{{#if name}}
<tr>
<td>{{name}}</td>
<td>{{sex}}</td>
<td>{{age}}</td>
</tr>
{{/if}}
{{/each}}
</script>
6、registerHelper() 注册handlebars
需要用到js处理并返回数据需要用到注册,类似过滤器
<script id="table-template" type="text/x-handlebars-template">
{{#each student}}
{{#if name}}
<!-- compare 注册名, age 20 为参数 -->
{{#compare age 20}}
<tr>
<td>{{name}}</td>
<td>{{sex}}</td>
<td>{{age}}</td>
</tr>
{{else}}
<tr>
<td>?</td>
<td>?</td>
<td>?</td>
</tr>
{{/compare}}
{{/if}}
{{/each}}
</script>
//注册一个比较大小的Helper,判断v1是否大于v2
Handlebars.registerHelper("compare",function(v1,v2,options){
if(v1>v2){
//满足添加继续执行
return options.fn(this);
}
else{
//不满足条件执行{{else}}部分
return options.inverse(this);
}
});
| 参考资料
| http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html
国内查看评论需要代理~