我有擁有(例如)30個項目的Backbone.js集合。通過索引篩選Backbone.js集合
我想傳遞給我的模板過濾的集合包含原始集合中的每個第三項。
有誰知道它是如何優雅地完成的? CoffeeScript代碼是首選。
我有擁有(例如)30個項目的Backbone.js集合。通過索引篩選Backbone.js集合
我想傳遞給我的模板過濾的集合包含原始集合中的每個第三項。
有誰知道它是如何優雅地完成的? CoffeeScript代碼是首選。
這裏假設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
骨幹收集有一些有用的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的例子。
感謝您的詳細解答! – liorix 2012-03-23 14:56:27