如何填充Backbone.js集合的_byId数组,以便我可以使用`get`?

时间:2012-04-07 03:24:38

标签: backbone.js

我有一个集合,collection.models返回一个模型数组。但是,当我调用collection.get(someId)(并且此id是collection.models数组中模型的ID)时,我得到undefined。查看collection._byId,它看起来像一个空对象。

如何正确填充_byId,以便我可以使用get?或许我在初始化我的集合时做错了,这就是_byId为空的原因。

3 个答案:

答案 0 :(得分:3)

我有点晚了,但希望这对其他人来说仍然有用。

Collection._byId只是一个普通的js哈希对象。真的没什么好看的。如果您希望Collection.get工作,只需将所有模型添加到_byId哈希。

在集合的范围内:

var someId = '123'; // any id will do

this._byId[someId] = someModel; // someModel.id = '123'

console.log(!!this.get(someId)); // should return true

答案 1 :(得分:0)

由于我在Rails中使用它,因此Rails生成的默认json与Backbone不兼容。我不知道为什么在尝试学习Backbone时我没有看到它。无论如何,你可以:

  1. 更改Rails生成JSON的方式
  2. Change the way your Backbone app reads the JSON

答案 2 :(得分:0)

听起来OP有一个稍微不同的问题,但我遇到了类似的问题,并且认为我发布了对我有用的内容。

与原始问题一样,collection.models包含正确的模型,但在我的情况下,_byId哈希包含模型的cid版本,并非空。尽管如此,_byId并未包含具有正常ID的模型(通常有两个版本 - id一个和cid一个),所以我不是&#39 ;能够使用collection.get(id)来检索它。当我读到cid时,我的问题变得更加清晰了。来自文档:

  

当模型尚未保存到服务器时,客户端ID很方便,并且还没有最终的真实ID,但已经需要在UI中显示。

我认为等待服务器作为我的cid模型并且collection.model具有正确的ID是一个问题。但是,在{ wait : true }中传递collection.create选项可以解决此问题。