3

我目前正在使用Handlebars来动态填充一些面板。在其中一个中,我觉得需要重复给定的任务。

// Add a looping helper for Handlebars
Handlebars.registerHelper('repeat', function(nFrom, nTo, oBlock) {
    var sResult = '';
    for (var i=nFrom; i < nTo+1; i++)
        sResult += oBlock.fn(i);
    return sResult;
});
{{#if oSomeObject}}
<ul>
    {{# repeat 1 2}}
    <li>{{../oSomeObject.aSomeProperty[{{this}}]</li>  <!-- Does not work (because of nested curlies) -->
    <li>{{../oSomeObject.aSomeProperty[this]}}</li>  <!-- Does not work -->
    {{/repeat}}
</ul>
{{/if}}

我有什么已知的方法可以访问我的repeat块中的数组内容吗?

4

1 回答 1

1

我会这样做:

Handlebars.registerHelper('myHelper', function(object, nFrom, nTo, oBlock){
    var sResult = '';
    for(var i=nFrom; i<nTo+1; i++)
        sResult += oBlock.fn(object[i]);
    return sResult;
});

或者,如果你想迭代所有oSomeObject

Handlebars.registerHelper('myHelper', function(object, oBlock){
    var sResult = '';
    for(var i=0; i<object.length; i++)
        sResult += oBlock.fn(object[i]);
    return sResult;
});

那么你可以调用它:

{{#myHelper oSomeObject}}
    <li>{{aSomeProperty}}</li>
{{/myHelper}}

这实际上与车把的each块助手相同,因此您可以只使用:

{{#each oSomeObject}}
    <li>{{aSomeProperty}}</li>
{{/each}}

来源

于 2013-07-31T22:07:33.520 回答