我正在尝试过滤主干集合以仅返回与两个属性匹配的模型,我只想返回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以字符串
的形式返回答案 0 :(得分:0)
通过查看您发布的收集数据,最明显的答案似乎是您的MyClient
模型idAttribute
user_id
。
Backbone Collection不能包含重复的模型,在这种情况下重复意味着具有相同idAttribute
的模型。
假设idAttribute
为user_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;
}
}