14

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

这行得通,现在我想通过它的 id 来抓取一个模型,MyCollection.at(0)我得到:

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

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

4

2 回答 2

20

你设置Model.idAttribute模型了吗?

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

默认情况下,Backbone 期望 id 属性被称为 id。设置 后,Backbone 会标准化 id的idAttribute处理,以便model.id始终可用,即使 id 属性被称为其他东西。原始 id 属性在模型的attributes哈希中可用,因此可以通过getmethd. 所以:

model.id === model.get('_id') // -> true
于 2013-01-13T02:36:06.733 回答
3

您可以使用cid模型的 (client-side ID) 属性作为 的参数MyCollection.get(),保证从创建开始就存在。该文档似乎认为这会起作用,请参阅http://backbonejs.org/#Collection-get

于 2013-01-13T02:16:20.740 回答