按属性值过滤骨干网收集

我有一个定义的模型和集合:

var Box = Backbone.Model.extend({ defaults: { x: 0, y: 0, w: 1, h: 1, color: "black" } }); var Boxes = Backbone.Collection.extend({ model: Box }); 

当这个集合被模型填充时,我需要一个由Box模型组成的新的Boxes集合,它具有包含在完整集合中的特定颜色属性,我这样做:

 var sorted = boxes.groupBy(function(box) { return box.get("color"); }); var red_boxes = _.first(_.values(_.pick(sorted, "red"))); var red_collection = new Boxes; red_boxes.each(function(box){ red_collection.add(box); }); console.log(red_collection); 

这工作,但我觉得有点复杂和不足。 有没有办法以更简单的方式做同样的事情?

这里是我描述的代码: http : //jsfiddle.net/HB88W/1/

我喜欢返回集合的新实例。 这使得这些过滤方法可链接(例如boxes.byColor("red").bySize("L") )。

 var Boxes = Backbone.Collection.extend({ model: Box, byColor: function (color) { filtered = this.filter(function (box) { return box.get("color") === color; }); return new Boxes(filtered); } }); var red_boxes = boxes.byColor("red") 

请参阅http://backbonejs.org/#Collection-where

 var red_boxes = boxes.where({color: "red"}); var red_collection = new Boxes(red_boxes); 
Interesting Posts