如何在JSON数组字段的基础上从主干集合中提取模型

How to extract model from backbone collection on the basis of a field which is array of JSON

本文关键字:集合 模型 提取 基础上 JSON 数组 字段      更新时间:2023-09-26

我有一个模型集合,其中模型包含一个字段,比如data,它是JSON数组。

data [{x : 3, y:4}]

现在我想使用主干收集的函数作为:

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;
  });
}

您将看到它只是扫描模型并使用!==比较属性。使用!=====(或者!===)比较数组时,比较的是引用,而不是内容;例如,这是错误的:

[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/