2013-01-13 3 views
14

Modelleri sunucudan getiren bir koleksiyona sahibim. Bu işleriBackbone.Collection modele göre model al

, şimdi MyCollection.at(0) ile id tarafından bir model kapmak istiyorum ve almak:

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

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

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

:

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 

Ben olsun onun kimliğiyle modeli almaya çalışırsanız Bunu anlamadım - dokümanlar, o koleksiyonda belirtilen kimliğe sahip bir model varsa, .get() yönteminin modeli döndüreceğini açıkça belirtir.

cevap

20

Modele Model.idAttribute ayarladınız mı?

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

Varsayılan olarak Backbone, kimlik özelliğinin id olarak çağrılmasını bekler. idAttribute ayarlandığında, Backbone, kimlik özelliği başka bir şey çağrılsa bile, model.id'un her zaman kullanılabilir olmasını sağlamak için kimlikleri işlemeyi standart hale getirir. Orijinal kimlik özelliği, Modelin attributes karma biçiminde ve get methd aracılığıyla kullanılabilir. Yani:

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

Haklısınız! (Buraya avuç içi hurma ekle) Bunu bir şekilde doktordan almadım ve _id = id varsayılanı olduğunu düşünmüştüm. Teşekkürler ;-) – Inoperable

3

Modelin cid (client-side ID) özniteliğini, MyCollection.get() numaralı argüman olarak kullanabilirsiniz. Belgeler çalışacak gibi görünüyor, bkz. http://backbonejs.org/#Collection-get.

+0

Ben CID numarası var ve ben kimliği ve değil CID kullanmak istiyorum. – Inoperable

+0

Her ikisi de modeli benzersiz bir şekilde tanımlar. –

+3

Anladım, ama dediğim gibi modele neden erişemediğimi öğrenmek istiyorum - dediğim Konu değil. – Inoperable