H5中都是Html,在这里我们没有el标签。所以我们只能借助模板。好处上面已经介绍了
web 开发中,js 解析JSON 是经常的事情。非常繁琐。handlebars 使用了模版,只要你定义一个模版,提供一个json对象,handlebars 就能吧json对象放到你定的模版中,非常方便好用!
- H5中都是Html,在这里我们没有el标签。所以我们只能借助模板。好处上面已经介绍了。
H5中循环遍历
- 第一步:在html中定义模板,将后台的json放在模板里。
- 第二步:在js中实例化这个模板
var myTemplate = Handlebars.compile($("#task-table-template").html());
- 第三步:将后台json传进来显示,并确定模板显示位置,下面的列子 将模板显示在class=notice_srcoll的div上
$('.notice_srcoll').html(myTemplate(data.noticeTasklist));
- 这里提到的json就是我们熟悉的json,给一个列子看看
var data = { users: [
{username: "alan", firstName: "Alan", lastName: "Johnson", email: "[email protected]" },
{username: "allison", firstName: "Allison", lastName: "House", email: "[email protected]" },
{username: "ryan", firstName: "Ryan", lastName: "Carson", email: "[email protected]" }
]};
H5中if else的使用
- handlebar中if else只支持原生态的,也就是只支持true 和 false 的判断,但是事实上我们的逻辑中很多情况下的判断并不是仅仅就true和false,这个时候我们这么办呢。先看看原生态的if else
{{#if score}}
{{name}}
主讲老师
{{teacher}}
{{else}}
"{{name}}"
主讲老师
{{teacher}}
{{/if}}
这里的判断就是说score未undefined null false [] 返回的都是false,在这里并不能判断分数大小。这个时候我们通过Handlebars.registerHelper用来定义Helper来对handlebars就醒扩展。
html代码
{{#compare age 20}}
{{name}}
{{sex}}
{{age}}
{{else}}
?
?
?
{{/compare}}
- js对handlebars扩展
//注册一个比较大小的Helper,判断v1是否大于v2
Handlebars.registerHelper("compare",function(v1,v2,options){
if(v1>v2){
//满足添加继续执行
return options.fn(this);
}else{
//不满足条件执行{{else}}部分
return options.inverse(this);
}
});
这里需要说明一下,在利用Handlebars.registerHelper注册事件时,如果后面的function中没有传options的话我们就可以直接调用,如果有options的话,我们需要在前面加上#,因为加上options的话是块级别的Helper。
- 事列一
Handlebars.registerHelper("addOne",function(index,options){
return parseInt(index)+1;
});
- 调用
- 事列二
Handlebars.registerHelper("compare",function(v1,v2,options){
if(v1>v2){
//满足添加继续执行
return options.fn(this);
}else{
//不满足条件执行{{else}}部分
return options.inverse(this);
}
});
- 调用
{{#compare age 20}}
- 原声if还支持多级判断
{{#if name.xxx}},这样写就假设name属性是一个map,检测name属性中是否包含xxx属性。
Helper中options参数
- 这里参考网上一篇博客的案列
{{#sort ages id="ages-list" class="con" }}
{{@name}}:{{this}}
{{/sort}}
- 经过编译后上面这段信息被分装在options里了。下面是注册代码
//上面的信息在下面的options里
Handlebars.registerHelper("sort",function(context,options){
var i = 0,str="
{{subject}}
{{{body}}}