使用backbone.js中id的数组中的过滤器返回集合列表

时间:2011-09-07 17:26:34

标签: backbone.js

所以我已经使用循环工作了,但是想知道是否有更简洁的方法来做到这一点。

基本上我有一个模型从另一个模型得到一组id,目前我循环每个id并使用模型集合上的过滤器手动将模型添加到新集合。

getOneById : function(id){
    return this.filter(function(data) {
        return data.get("id") == id;
    });
},

有没有办法直接返回类似

的列表
getAllById : function(arrayIds){
    return _(this.filter(function(data) {
        ??????? return data.get("id") == eachID;
    }));
},

谢谢!

2 个答案:

答案 0 :(得分:4)

你可以通过检查你的对象的id是否在一个索引>来减少循环。数组中的-1:

function(arrayIds){
  var models = _.select(collection, function(model){
    return (_.indexOf(arrayIds, model.id) > -1);
  });
  return models;
}

这需要在您的代码中包含underscore.js,但由于您已经使用了主干,因此您已经拥有了。

答案 1 :(得分:0)

我的解决方案:

拥有集合(Backbone.Collection)和 arrayIds

var collection2 = new Backbone.Collection();
collection2.add(collection.models.filter(function(model){
    return arrayIds.indexOf(model.id) !== -1;
}));

四行:D

console.assert(collection2.length === arrayIds.length)  //OK