Подтвердить что ты не робот

Сортировка сетки фильтра по значению атрибута

У меня есть определенная модель и коллекция:

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

});

var Boxes = Backbone.Collection.extend({
    model: Box
});

Когда коллекция заполнена моделями, мне нужна новая коллекция Boxes, сделанная из моделей Box, которые имеют определенный атрибут цвета, содержащийся в полной коллекции, я делаю это следующим образом:

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/

4b9b3361

Ответ 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")