使用knockoutjs将类应用于每个第n个模板元素

时间:2012-03-18 18:11:20

标签: knockout.js templating

我一直在试验knockoutjs,重新修改现有项目。

我当前的布局有逻辑来确定呈现的<div>标记是第一个还是第四个项目。

if (index % 4 == 0) addClass('omega');
if (index % 4 == 1) addClass('alpha');

是否有任何内置的敲门功能可以模拟类似的条件?

1 个答案:

答案 0 :(得分:2)

为您提供的一些选择:

看起来像这样:

//track an index on items in an observableArray
ko.observableArray.fn.indexed = function() {
   //whenever the array changes, make one loop to update the index on each
   this.subscribe(function(newValue) {
       if (newValue) {
           var item;
           for (var i = 0, j = newValue.length; i < j; i++) {
               item = newValue[i];
               if (!ko.isObservable(item.$index)) {
                  item.$index = ko.observable();
               }
               item.$index(i);      
           }
       }   
   }); 

   this.valueHasMutated(); 
   return this;
};

您可以将observableArray初始化为索引,如:

this.myArray = ko.observableArray().indexed();

现在,当操纵可观察数组时,它将通过一个项目并更正索引。这比每次查找每个项目的索引foreach更好。