2012-07-14 11 views
7

Powiedzmy mam 2 modele:ember.js stowarzyszenia danych nie oszczędzając

App.Address = DS.Model.extend({ 
    street: DS.attr('string'), 
    person: DS.belongsTo('App.Person') 
}) 

App.Person = DS.Model.extend({ 
    name: DS.attr('string'), 
    addresses: DS.hasMany('App.Address') 
}) 

Teraz tworzę osobę

App.person = App.Person.createRecord({name: 'Bill'}); 
App.store.commit(); 

Gdy próbuję dodać adres do osoby, jak to

address = App.Address.createRecord({street: '123 Fake Street'}); 
App.person.get('addresses').pushObject(address); 

i zatwierdzić transakcję

App.store.commit(); 

Nowy adres zostanie zapisany, ale obiekt osoby nie zostanie rozpoznany jako zmieniony; chociaż lista identyfikatorów upadł z

{ 
    ... 
    "addresses": [] 
} 

do

{ 
    ... 
    "addresses": [3] 
} 

Czy istnieje sposób, aby pozwolić ember-dane wiedzieć, że moja osoba obiekt został zmieniony i musi być zbawiony?

Edytuj: Here to jsfiddle ilustrujące problem.

+2

Nie przeszkadza mi gdzie jest błąd, jak wyświetlacze konsoli oczekiwane rezultaty ... Każdy na bieżąco stan swój problem? Może używasz starej wersji danych ember? Czy wciąż napotykasz ten problem? –

Odpowiedz

1

Od teraz (ember-data rewizja 4) nie ma sposobu, aby to zrobić. Obiekt jest utrzymywany tylko na stronie belongsTo, ponieważ ma klucz obcy, więc jeśli ustawisz wartość w przynależności do strony relacji, powinna ona pozostać. Kolejna wersja danych ember powinna rozwiązać ten problem.

1

Prace wokół Znalazłem za to byłoby po prostu ręcznie dodać identyfikator jak:

App.Address = DS.Model.extend({ 
    street: DS.attr('string'), 
    personID: DS.attr('string'), 
    person: DS.belongsTo('App.Person') 
}) 

następnie podczas wysyłania danych, w polu PersonID i będzie ona co polu Osoba naśladować wygląda na to, że powinien wysłać.