过滤收集骨干根据属性值(Filter backbone collection by attribut

2019-06-26 16:09发布

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

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

});

var Boxes = Backbone.Collection.extend({
    model: 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/

Answer 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")


Answer 2:

见http://backbonejs.org/#Collection-where

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

var red_collection = new Boxes(red_boxes);


文章来源: Filter backbone collection by attribute value