Reputation: 1509
I have a collection that fetches models from server.
This works, now I want to grab a model by its id with MyCollection.at(0)
and I get:
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
If I try to get the model by its id i get:
MyCollection.get("50ef7a63b2a53d17fe000001")
=> undefined
MyColleciton.get({_id:"50ef7a63b2a53d17fe000001"})
=> undefined
MyCollection.get({'_id':"50ef7a63b2a53d17fe000001"})
=> undefined
I don't get that - the docs say clearly that the .get()
method will return the model if a model with the given id exists in that collection.
Upvotes: 14
Views: 26139
Reputation: 35970
Have you set Model.idAttribute
on the Model?
var Model = Backbone.Model.extend({
idAttribute:"_id"
});
By default Backbone expects the id property be called id. When the idAttribute
has been set, Backbone standardizes handling of ids so that model.id
is always available, even if the id property is called something else. The original id property is available in the Model's attributes
hash, and as such via the get
methd. So:
model.id === model.get('_id') // -> true
Upvotes: 20
Reputation: 76995
You can use the cid
(client-side ID) attribute of the model as an argument to MyCollection.get()
, which is guaranteed to exist from creation on. The documentation seems to think that will work, see http://backbonejs.org/#Collection-get.
Upvotes: 3