2013-01-13 1 views
14

J'ai une collection qui récupère les modèles du serveur.Backbone.Collection obtenir le modèle par l'ID

Cela fonctionne, maintenant je veux saisir un modèle par son id avec MyCollection.at(0) et je reçois:

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 

Si j'essaie d'obtenir le modèle par son id je reçois:

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

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

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

Je ne comprends pas cela - les docs disent clairement que la méthode .get() renverra le modèle si un modèle avec l'ID donné existe dans cette collection.

Répondre

20

Avez-vous réglé Model.idAttribute sur le modèle? Par défaut, Backbone s'attend à ce que la propriété id soit appelée id. Lorsque le idAttribute a été défini, Backbone standardise la gestion des ID de sorte que model.id soit toujours disponible, même si la propriété id est appelée autre chose. La propriété id d'origine est disponible dans le hachage attributes du modèle et, en tant que tel, via la méthode get. Donc:

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

Vous avez raison! (Insérez la face-paume ici) Je ne l'ai pas obtenu d'une manière ou d'une autre du doc ​​et j'ai pensé que _id = id EST la valeur par défaut. Merci ;-) – Inoperable

3

Vous pouvez utiliser l'attribut cid (ID côté client) du modèle en tant qu'argument à MyCollection.get(), dont l'existence est garantie à compter de la création. La documentation semble penser que cela fonctionnera, voir http://backbonejs.org/#Collection-get.

+0

J'ai reçu l'ID et non le CID, et je veux utiliser l'ID et non le CID. – Inoperable

+0

Ils identifient tous deux le modèle de manière unique. –

+3

Je l'ai eu, mais je veux savoir pourquoi je ne peux pas accéder au modèle par l'ID, comme je l'ai dit - le CID n'est pas le problème. – Inoperable

Questions connexes