我有拥有(例如)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