我有一个模型集合,其中模型包含一个字段说数据,它是 JSON 数组。
data [{x : 3, y:4}]
现在我想将骨干集合的where函数用作:
var model= coll.where ({
data : data
})
它没有输出。我不确定我做对了还是缺少了什么。请指导我解决这个问题
我有一个模型集合,其中模型包含一个字段说数据,它是 JSON 数组。
data [{x : 3, y:4}]
现在我想将骨干集合的where函数用作:
var model= coll.where ({
data : data
})
它没有输出。我不确定我做对了还是缺少了什么。请指导我解决这个问题
如果你看看如何where
工作:
where: function(attrs, first) {
if (_.isEmpty(attrs)) return first ? void 0 : [];
return this[first ? 'find' : 'filter'](function(model) {
for (var key in attrs) {
if (attrs[key] !== model.get(key)) return false;
}
return true;
});
}
您会看到它只是扫描模型并使用!==
. 当您使用!==
or ===
(或!=
或==
就此而言)比较数组时,比较的是引用,而不是内容;例如,这是错误的:
[1] === [1]
结果是使用搜索数组where
效果不佳,where
这意味着搜索简单标量值的快捷方式。
如果你需要搜索一个数组,那么你可以filter
直接使用,你可以使用_.isEqual
来帮助你比较东西:
var models = coll.filter(function(m) {
return _.isEqual(m.get('a'), data);
});
如果您想要一场比赛,请使用find
而不是filter
.
演示:http: //jsfiddle.net/ambiguous/PZZv4/1/