定義済みのモデルとコレクションがあります。
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);