2017-06-01 3 views
0

Ich versuche zu beobachten (in meinem Controller), ob sich mein Ember-Modell geändert hat.Neugieriges Verhalten beim Beobachten von Embers dirtyType-Eigenschaft

personChanged: function() { 
    // do stuff 
}.observes('person.dirtyType'), 

Dieser Beobachter wird getriggert nie, wenn ich vor dem isDirty Eigenschaft zugreifen. Wenn zum Beispiel die Eigenschaft get in der Route (wo das Modell geholt wird) wird der Beobachter genau einmal ausgelöst.

model.people.get('firstObject').get('dirtyType'); 
controller.set('person', model.people.get('firstObject')); 

Wenn ich will, ausgelöst, um die Beobachter bekommen jedes Mal das Modell änderte ich wieder dirtyType im Beobachter zugreifen muß.

personChanged: function() { 
    this.get('person.dirtyType'); 
    // do stuff 
}.observes('person.dirtyType'), 

Der Wert dirtyType in dem Beobachter immer wie erwartet.

Vielleicht mache ich es völlig falsch, aber ich kann das obige Verhalten nicht folgen.

Antwort

0

Es ist etwas unberechenbar vor sich geht, wenn wir firstObject verwenden auf Basis dieser Frage Ember computed alias on array firstObject not working

Ich habe es nicht erlebt bestätigen. sein kann, bis dahin können Sie die unten Abhilfe versuchen,

controller.set('person', model.people.get('firstObject')); 

Anstelle der oben können Sie berechnete Eigenschaft definieren,

person:Ember.computed('model.people.[]',function(){ 
return return this.get('model.people.firstObject'); 
}) 

Jetzt Ihr unten Beobachter die ganze Zeit arbeiten.

personChanged:Ember.observer('person.dirtyType',function() { 
    // do stuff 
}), 
+0

Das funktioniert nicht für mich, sorry. – Fabic

+0

Unverbrauchte berechnete Eigenschaften lösen keine Beobachter aus [Referenz] (https://guides.emberjs.com/v2.13.0/object-model/observers/#toc_unconsumed-computed-properties-do-not-trigger-observers). Wenn Sie also "person" nicht in der Vorlage verwenden, dann denken Sie über 'this.get ('person')' in der init-Methode nach. – kumkanillam

+0

Ich benutzte 'person' in meiner Vorlage, fügte aber' this.get ('person') 'in der init Methode hinzu. Das Problem bleibt bestehen. – Fabic

Verwandte Themen