Backbone.Collection通过id获取模型

时间:2013-01-13 02:12:58

标签: javascript backbone.js

我有一个从服务器获取模型的集合。

这很有效,现在我想通过MyCollection.at(0)的ID来获取模型,然后我得到:

child
_changes: Array[0]
_changing: false
_currentAttributes: Object
_events: Object
_hasComputed: true
_pending: false
_previousAttributes: Object
attributes: Object
_id: "50ef7a63b2a53d17fe000001"
author_name: "author name"
bookmark: ""
info: "bookmark description"
__proto__: Object
changed: Object
cid: "c26"
collection: child
view: child
__proto__: Surrogate

如果我尝试通过其ID获取模型,我会得到:

MyCollection.get("50ef7a63b2a53d17fe000001")
=> undefined

MyColleciton.get({_id:"50ef7a63b2a53d17fe000001"})
=> undefined

MyCollection.get({'_id':"50ef7a63b2a53d17fe000001"})
=> undefined

我不明白 - 文档清楚地说明如果该集合中存在具有给定id的模型,.get()方法将返回模型。

2 个答案:

答案 0 :(得分:20)

您是否在模型上设置了Model.idAttribute

var Model = Backbone.Model.extend({
    idAttribute:"_id"
});

默认情况下,Backbone期望id属性被称为id。设置idAttribute后,Backbone会标准化id的处理,以便model.id始终可用,即使id属性被调用。原始id属性在Model的attributes哈希中可用,因此可以通过get methd获得。所以:

model.id === model.get('_id') // -> true

答案 1 :(得分:3)

您可以使用模型的cid(客户端ID)属性作为MyCollection.get()的参数,该参数保证在创建时存在。文档似乎认为可行,请参阅http://backbonejs.org/#Collection-get