2012-10-23 21 views
0

我想在每个循环中更改类名; ,使它看起来像这样;Backbone在{{each items}}期间更改类名}

<div class="active"> 
    // do somthing 
</div> 
<div class="static"> 
    //do 
</div> 

我的代码看起来像这样

{{#each pages}} 
    <div class="active"> 
    //do 
    </div> 
{{/each}} 

没有之类的标识。所以第一个将是活跃的,其余的项目将是静态的。

+0

据我所知没有通过'#each'提供指数可能.. – lrsjng

+0

您使用的把手为您的模板进行检查? –

+0

是的,我正在使用手柄 – myTD

回答

1

如果您想在模板中执行此操作,可以添加自己的助手。事情是这样的:像这样

Handlebars.registerHelper('each_with_class', function(ary, first, rest, options) { 
    if(!ary || ary.length == 0) 
     return options.inverse(this); 

    var result = [ ]; 
    var context = null; 
    var cls  = { cls: first }; 
    for(var i = 0; i < ary.length; ++i) { 
     context = _({}).extend(ary[i], cls); 
     result.push(options.fn(context)); 
     cls.cls = rest; 
    } 
    return result.join(''); 
}); 

那么你的模板可以说的东西:

{{#each_with_class pages "active" "static"}} 
    <div class="{{cls}}"> 
     Same stuff you're doing now. 
    </div> 
{{/each_with_class}} 

如果你不介意ary[i]相处的方式进行修改,那么你可以直接分配给ary[i].cls而不是使用_.extend的做一个副本。

演示:http://jsfiddle.net/ambiguous/ZMSQh/1/

+0

谢谢,我真的很喜欢这个... – myTD

0

据我所知没有通过{{#each}}提供的指数,可以进行检查..

一个解决方法是将这个类存储在您pages的项目,然后使用类似

{{#each pages}} 
    <div class="{{this.classname}}"> 
    //do 
    </div> 
{{/each}} 
+0

谢谢你的回应..但我试图远离这种结构,因为集合来自其他地方,我更喜欢不操纵它,如果可能的话。 – myTD