2012-03-23 114 views
4

我有擁有(例如)30個項目的Backbone.js集合。通過索引篩選Backbone.js集合

我想傳遞給我的模板過濾的集合包含原始集合中的每個第三項。

有誰知道它是如何優雅地完成的? CoffeeScript代碼是首選。

回答

6

這裏假設originalCollection是你現有的集合

var newCollection = new Backbone.Collection(); 

for (var i = 0, l = originalCollection.length; i < l; i++) { 
    if (i % 3 === 0) { newCollection.add(originalCollection.models[i]); } 
} 

此代碼通過各現有模型循環,只有加入模型中的新的集合,如果它的指數是3

多你可以使這個更好一點,通過使用下劃線each方法暴露在Underscore.js在骨幹Collections:

var newCollection = new Backbone.Collection(); 

originalCollection.each(function (model, index) { 
    if (index % 3 === 0) { newCollection.add(model); } 
}); 

轉換以上到的CoffeeScript結果:

newCollection = new Backbone.Collection() 
originalCollection.each (model, index) -> 
    newCollection.add model if index % 3 is 0 
+0

感謝您的詳細解答! – liorix 2012-03-23 14:56:27

2

骨幹收集有一些有用的Underscore methods混合英寸您可以使用filter獲得的模型數組可以傳遞到模板:

filteredModels = collection.filter (model, i) -> i % 3 == 0 

或者,您可以使用數組的理解;儘管我認爲這是不太可讀......

filteredModels = (model for model, i in collection.models when i % 3 == 0) 

如果你真的需要一個在Backbone.Collection您的模板,你可以創建一個新的與過濾模式:

filteredCollection = new Backbone.Collection filteredModels 

Here是一個工作jsfiddle的例子。