我有一个模型集合,其中模型包含一个字段说数据,它是 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/