43

定義済みのモデルとコレクションがあります。

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/

4

2 に答える 2

83

コレクションの新しいインスタンスを返すのが好きです。これにより、これらのフィルタリング メソッドが連鎖可能になります (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")
于 2012-08-01T15:29:51.797 に答える
48

http://backbonejs.org/#Collection-whereを参照してください

var red_boxes = boxes.where({color: "red"});

var red_collection = new Boxes(red_boxes);
于 2013-08-08T13:56:29.680 に答える