过滤主干集合返回1结果

时间:2014-11-26 16:14:15

标签: javascript backbone.js backbone-collections

我正在尝试过滤主干集合以仅返回与两个属性匹配的模型,我只想返回owner_id为null且user_id等于“1”的模型。这是我的代码,

myFilter: function( owner_id, user_id) {
    console.log(owner_id, user_id);
    var filtered = this.filter(function(user) {
        return user.get("owner_id") === owner_id && user.get("user_id") === user_id});
    return new App.Collections.MyClients(filtered);
}

我知道我的收藏中有2条匹配的记录,但我只得到第一次返回,为什么会这样?

集合数据如下所示,

id  name        information     type     user_id    owner_id
18  Client 1                    client       1         NULL
19  Client 2                    client       1         32
20  Client 3                    client       1         NULL

user_id以字符串

的形式返回

1 个答案:

答案 0 :(得分:0)

通过查看您发布的收集数据,最明显的答案似乎是您的MyClient模型idAttribute user_id

Backbone Collection不能包含重复的模型,在这种情况下重复意味着具有相同idAttribute的模型。

假设idAttributeuser_id,请致电:

return new App.Collections.MyClients(filtered);

尽管您的MyClients对象包含user_id为1的多个模型,但您的filtered集合仅包含user_id为1的第一个模型。

来自骨干注释源代码中的set方法:

// If a duplicate is found, prevent it from being added and optionally merge it into the existing model.
if (existing = this.get(id)) {
  if (remove) modelMap[existing.cid] = true;
    if (merge) {
      attrs = attrs === model ? model.attributes : attrs;
      if (options.parse) attrs = existing.parse(attrs, options);
      existing.set(attrs, options);
      if (sortable && !sort && existing.hasChanged(sortAttr)) sort = true;
    }
    models[i] = existing;
  }
}