循环使用函数作为参数Handlebars

时间:2015-08-21 12:15:31

标签: javascript html handlebars.js

我必须在Handlebars中做这样的事情。

var loopTimes=10-(array1.lenght+array2.lenght);
for (var i=0; i<loopTimes; i++) {
    <td></td>
}

现在我有以下代码来执行循环:

<script type="text/javascript">
    Handlebars.registerHelper('times', function(n, block) {
        var accum = '';
        for(var i = 0; i < n; ++i)
            accum += block.fn(i);
        return accum;
    });
</script>

然后我打电话给#34;次&#34;模板中的功能。

{{#each data}}
    {{#each array1}}
        <td>{{this}}</td>
    {{/each}}
    {{#each array2}}
        <td>{{this}}</td>
    {{/each}}
    {{#times loopTimes}}
        <td></td>
    {{/times}}
{{/each}}

但我不知道如何设置&#34; loopTimes&#34;变量。我尝试创建2个函数加号和减号,如下所示:

Handlebars.registerHelper('plus', function(n, s) {
    return n+s;
});
Handlebars.registerHelper('minus', function(n, s) {
    return n-s;
});

在模板中我有这个来计算循环参数的值:

{{#times minus 10 plus array2.length array2.lenght}}
    <td></td>
{{/times}}

但是,减号没有效果。模板永远不会评估负值,当然也不会输入加号函数。我试图用括号分隔每个函数(也用括号或引号),但如果我这样做,那么当Handlebars尝试创建html代码时我在javascript中有错误,因为它与预期的结构不匹配

我可以创建一个字段&#34; loopTimes&#34;在javascript中并将其设置为数据对象。我认为这是最简单的解决方案,但它非常缓慢,因为我可以得到10.000个元素的数据数组,而且我必须得到所有元素来设置这个字段。如果可能的话,我更愿意在模板中这样做。

有人可以帮帮我吗?有什么想法吗?

谢谢!

0 个答案:

没有答案