4

在Django中有一个名为cycle的模板标签。 https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#cycle在Handlebars.js中实现循环标签

一个例子:

{% for o in some_list %} 
    <tr class="{% cycle 'row1' 'row2' %}"> 
     ... 
    </tr> 
{% endfor %} 

输出:

<tr class="row1">...</tr> 
<tr class="row2">...</tr> 
<tr class="row1">...</tr> 
<tr class="row2">...</tr> 

如何实现在Handlebars.js这种类型的功能?

+0

我不知道这是可能以这种方式扩展Handlebars.js。你打开替代JS模板引擎? – 2012-03-01 23:49:54

+0

无论什么作品。 – hekevintran 2012-03-02 00:11:50

回答

3

我发现在http://thinkvitamin.com/code/handlebars-js-part-2-partials-and-helpers/

Handlebars.registerHelper("stripes", function(array, even, odd, fn) { 
    if (array && array.length > 0) { 
    var buffer = ""; 
    for (var i = 0, j = array.length; i < j; i++) { 
     var item = array[i]; 

     // we'll just put the appropriate stripe class name onto the item for now 
     item.stripeClass = (i % 2 == 0 ? even : odd); 

     // show the inside of the block 
     buffer += fn(item); 
    } 

    // return the finished buffer 
    return buffer; 
    } 
}); 


{{#stripes myArray "even" "odd"}} 
    <div class="{{stripeClass}}"> 
    ... code for the row ... 
    </div> 
{{/stripes}} 
2

这里是我想出了:

Handlebars.registerHelper('cycle', function(value, block) { 
    var values = value.split(' '); 
    return values[block.data.index % (values.length + 1)]; 
}); 

{{#each users}} 
    <tr class="{{cycle 'alternate'}}"> 
    <tr class="{{cycle 'odd even'}}"> 
{{/each}} 
+0

我不得不从'(values.length + 1)'中删除'+ 1',以使其正常工作。它选择一个空字符串作为数组末尾的值。 – matueranet 2017-02-07 14:35:03