如何使用Handlebars.js创建条件行类?

Ant*_*ene 2 html javascript handlebars.js

我有一个有效结构的布局如下

<ul class="row">
    <li>content</li>
    <li>content</li>
    <li>content</li>
    <li>content</li>
    <li>content</li>
    <li>content</li>
    <li>content</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我想要的是,对于每5个项目,使用"row"类创建一个新行,以便我的代码看起来如下所示

<ul class="row">
    <li>content</li>
    <li>content</li>
    <li>content</li>
    <li>content</li>
<li>content</li>
</ul>
<ul class="row">
    <li>content</li>
    <li>content</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何使用车把帮手完成这项工作?

nik*_*shr 5

您可以创建一个包装帮助器,将所需数量的元素中的行数组分开:

// attr : name of the attribute in the current context to be split, 
//        will be forwarded to the descendants
// count : number of elements in a group
// opts : parameter given by Handlebar, opts.fn is the block template
Handlebars.registerHelper('splitter', function (attr, count, opts) {
    var context, result, arr, i, zones, inject;

    context = this;
    arr = context[attr];
    zones = Math.ceil(arr.length / count);

    result="";
    for (i = 0; i < zones; i++) {
        inject = {};
        inject[attr] = arr.slice(i * count, (i + 1) * count);

        result += opts.fn(inject);
    }

    return result;
});
Run Code Online (Sandbox Code Playgroud)

假设您的数据传递为{ rows: [ {text: "Row 1"}, ... ] },模板可能如下所示

{{#splitter "rows" 5}}
    <ul class='row'>
        {{#each rows}}
        <li>{{text}}</li>
        {{/each}}
    </ul>
{{/splitter}}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/HwJ6s/一起玩的小提琴