2013-01-13 20 views
14

Mam kolekcja, która pobiera modele z serwera.Backbone.Collection uzyskać model po id

To działa, teraz chcę, aby pobrać model za jego ID z MyCollection.at(0) i uzyskać:

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 

Gdy próbuję dostać model poprzez jego id uzyskać:

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

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

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

Nie rozumiem tego - doktorzy mówią wyraźnie, że metoda .get() zwróci model, jeśli model z danym id istnieje w tej kolekcji.

Odpowiedz

20

Czy ustawiono model Model.idAttribute?

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

Domyślnie Backbone przewiduje właściwość id nazwać id. Po ustawieniu idAttribute, Kręgosuszek standaryzuje obsługę identyfikatorów, aby model.id był zawsze dostępny, nawet jeśli właściwość id jest nazywana czymś innym. Oryginalna właściwość id jest dostępna w mieszance modelu attributes, a jako taka za pomocą metody metod. get. Więc:

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

Masz rację! (Wstaw tu twarz) W jakiś sposób nie zrozumiałem tego z dokumentu i uważałem, że _id = id jest domyślne. Dzięki ;-) – Inoperable

3

Można użyć atrybutu cid (identyfikator po stronie klienta) modelu jako argumentu dla MyCollection.get(), który gwarantuje istnienie od utworzenia na. Wydaje się, że dokumentacja działa, zobacz http://backbonejs.org/#Collection-get.

+0

mam identyfikator nie CID i chcę użyć identyfikatora i nie CID. – Inoperable

+0

Obie jednoznacznie identyfikują model. –

+3

Mam to, ale chcę się dowiedzieć, dlaczego nie mogę uzyskać dostępu do modelu po identyfikatorze, jak powiedziałem - cid nie jest problemem. – Inoperable