【Handlebars】基本用法

基本使用方法

使用Handlebars,首先我们将Html抽出来,就像用script标签包裹起来,放入我们当前的页面中:

<script src="script/lib/handlebars.js"></script>

<div id="container"></div>
<script type="text/x-handlebars-template" id="template-user">
    {{#each this}}
        <p>{{name}}:{{age}}</p>
    {{/each}}
</script>

JS使用模板:

var $container = $('#container')
var source = $('#template-user').html()
var template = Handlebars.compile(source)   //编译成模板
var html = template(data)   //生成完整的html结构
$container.html(html)

if

{{#if isEdit}}
    <p>isEdit</p>
{{/if}}

if else

{{#if isEdit}}
    <p>isEdit</p>
{{else}}
    <p>isNotEdit</p>
{{/if}}

多个分支,写法和js一样:

{{#if isEdit}}
    <p>isEdit</p>
{{else if isRead}}
    <p>isNotEdit isRead</p>
{{else}}
    <p>isNotRead</p>
{{/if}}

unless

与if相反

each 遍历数组

通过@index或者@key都可以获得序号,但是序号都是从0开始的,这个比较坑!如果要从1开始,得自己写个helper处理

通过@first和@last可以判断是否是数组的第一个或者最后一个。

遍历对象

{{#each this}}
    <p>{{@key}}:{{this}}</p>
{{/each}}

var data = {
    name: 'yyy',
    age: 23
};

#页面效果
name:yyy
age:23

{{{}}} 避免HTML转义

<div>{{{richText}}}</div>

var data = {
    richText: '<div>this is rich text</div>'
};

如果使用{{}},其中的HTML标签会转义输出。

Helpers

注册一个全局的moment,这样所有的时间格式化,都可以通过{{moment time}}调用,维护的成本大大降低。

{{#each this}}
    <p>{{name}}:{{moment addTime}}</p>
{{/each}}

#js

Handlebars.registerHelper('moment', function (date, options) {
    var formatStr = options.hash.format || 'YYYY-MM-DD';
    return new Handlebars.SafeString(moment(date).format(formatStr));
});

var data = [
    {
        name: 'xxx',
        addTime: new Date()
    },
    {
        name: 'zzz',
        addTime: new Date()
    }
];

Handlebars.SafeString就是不转义Html,如果想转义Html直接return内容即可。

#template
<p>{{safe}}</p>

#js
Handlebars.registerHelper('safe', function () {
   return new Handlebars.SafeString('<div>safe string</div>')
});

#页面效果
safe string

…/

通过…/回到each之外。

#template
<ul>
    {{#each this}}
        <li>
            <ul>
                {{#each this}}
                    <li>{{@../index}}-{{@index}}{{this}}</li>
                {{/each}}
            </ul>
        </li>
    {{/each}}
</ul>

#js
var data = [
    ['aaa', 'bbb', 'ccc'],
    ['ddd', 'eee', 'fff']
];

#页面效果
0-0 aaa
0-1 bbb
0-2 ccc
1-0 ddd
1-1 eee
1-2 fff

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值