0

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

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

现在我想将骨干集合的where函数用作:

var model= coll.where ({
data : data
})

它没有输出。我不确定我做对了还是缺少了什么。请指导我解决这个问题

4

1 回答 1

1

如果你看看如何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/

于 2013-07-23T18:43:31.563 回答