如何使用Handlebars循环中的{{this}}访问数组内容?

时间:2013-07-24 13:54:32

标签: handlebars.js

我目前正在使用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块中访问我的数组内容?

1 个答案:

答案 0 :(得分: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}}

source