2012-03-28 23 views
18

這可能很簡單,但我似乎無法找到它。在knockout.js中,如何打印可重複使用foreach綁定迭代的可觀察數組中的項的索引?Knockout.js在foreach中打印對象的索引

+2

在KO 2.1.0(測試版現在可用)中,您可以使用'$ index'獲取foreach中的索引。以下是測試版主題:https://groups.google.com/d/topic/knockoutjs/LdUfjGNZOj8/discussion。類似於馬特在他的回答中所描述的,我使用這種技術(將'indexed'函數添加到observableArrays中):http://stackoverflow.com/questions/9760861/apply-a-class-to-every-nth-template-元素與knockoutjs – 2012-03-28 19:03:53

+0

@ RPNiemeyer:我約98%肯定我在Knockout論壇上從你身上偷走它! – 2012-03-28 19:11:06

+0

@MattBurland不用擔心! – 2012-03-28 19:20:58

回答

11

你不能。不直接反正。我用這個功能自己添加一個索引屬性的對象在我ObservableArrays:在我的ViewModel

function indexSubscribe(array) { 
     array.subscribe(function() { 
      for (var i = 0, j = array().length; i < j; i++) { 
       var item = array()[i]; 
       if (!item.index) { 
        item.index = ko.observable(i); 
       } else { 
        item.index(i); 
       } 
      } 
     }); 
    }; 

然後,我可以做這樣的事情:

this.whatevers = ko.observableArray(); 
indexSubscribe(this.whatevers); 
+0

+1,流暢的解決方案 – Tyrsius 2012-06-05 16:18:39

0

以下解決方案可能是遲到的答案。但是,如果您的最佳選擇是viewmodel以下解決方案將有助於最新的修復。

根據Knockout 3.1.0及以上的庫有簡單的工作。 index可作爲第二參數傳遞給arrayForEach

var items = ["Mercedes", "Volvo", "BMW"]; 

ko.utils.arrayForEach(items, function(item, index) { 
    console.log(item + ' ' + index); 
}); 

希望此解決方案可能有助於某人。