我有Backbone.js集合,例如包含30个项目。
我想传递给我的模板过滤集合包含原始集合中的每个第3项。
有谁知道如何优雅地完成它? CoffeeScript代码是首选。
答案 0 :(得分: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的倍数时才添加模型。
通过在Backbone集合中使用Underscore.js公开的下划线each
方法,你可以做得更好一些:
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
答案 1 :(得分:2)
Backbone集合有一些有用的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示例。