Ich versuche, eine Ember-App ohne Prototyp-Erweiterungen zu erstellen, und die Ember-Dokumentation gibt Beispiele dafür, aber sie enthalten nicht das Beispiel, wenn ich möchte, dass mein Beobachter auf init läuft. Also momentan wenn mein Code so geschrieben wäre:
%Vor%Das einzige Beispiel, das ich finden kann, um es zu schreiben, ist wie folgt:
%Vor%Wie würde ich also sagen, dass dieser Code auf init laufen soll?
Vielleicht suchen Sie dies
%Vor% ODER ( dies wird Handler nicht auslösen, wenn die Änderung an init
erfolgt, oben in diesem Fall verwenden )
In Ordnung, diese Bearbeitung zur Beantwortung der unten genannten Fehler (?)
Nun, manchmal könnte es notwendig sein, Feuer zu machen der Beobachter auf Initialisierungszeit .
Ember.observer
ist eine Ember
Namespace-Methode, nicht Teil von Ember.Object
Prototyp. Daher ist this.observer
niemals vorhanden, aber addObserver()
funktioniert.
Es ist nicht notwendig, den Handler aufzurufen, die Ember-Laufzeit ruft den Handler auf, wenn sich die Eigenschaft ändert
Aufruf von this._super
ist unnötig, es sei denn, es ist wirklich wichtig. In diesem Fall, wenn Person
nur erweitert Ember.Object
aufrufende Super tut nichts.
Aktiviert standardmäßig nichts, außer es wird während der Klassendefinition überschrieben.
Es ist kontextabhängig, und solange OP nichts über die Klassendefinition gesagt hat, ist es nicht möglich, darauf zu antworten.
Die akzeptierte Antwort enthält tatsächlich fünf verschiedene Fehler unterschiedlicher Schweregrade.
Es wird unnötigerweise die Einrichtung des Beobachters im init-Hook vorgenommen.
Er richtet den Beobachter innerhalb des init
Hooks falsch ein, indem er Ember.observer
anstelle von this.observer
verwendet, was nicht einmal funktioniert.
Es kann den Handler bei der Init-Zeit nicht aufrufen (im Gegensatz zur Einrichtung).
Es kann init
in der Oberklasse nicht aufgerufen werden.
Es verwendet unnötigerweise reopen
.
init
hook Sie benötigen keinen prozeduralen "Aufruf" oder "Aufruf" in einem Init-Hook, um einen Beobachter einzurichten. Jedes der beiden folgenden Formulare richtet sie automatisch ein, wenn das Objekt instanziiert wird.
%Vor%object.observer
für die prozedurale Einrichtung von Beobachtern. Wenn Sie den Beobachter prozedural einrichten wollten, rufen Sie object.observer
, nicht Ember.observer
auf, was für die Verwendung wie oben definiert ist. Der Aufruf von Ember.observer
procedural führt zu nichts; Ember wird keine Ahnung haben, welches Objekt die zu beobachtende Eigenschaft ist. In diesem Fall wäre es this.observer('fullName', ...)
(obwohl, wie oben erwähnt, Sie dies eigentlich gar nicht tun müssen; stattdessen verwenden Sie den Ansatz von Punkt 1).
init
aufrufen
Sie möchten aber auch den Handler bei init
time aufrufen. Es gibt drei Möglichkeiten:
wo die dritte Option die Prototyp-Erweiterungen verwendet, die Sie nicht möchten.
super
von init
Wenn Sie einen init
Hook haben, obwohl er nicht benötigt wird, müssen Sie super
aufrufen, oder die Dinge werden fürchterlich ausfallen:
reopen
reopen
führt hier nichts aus. Fügen Sie einfach die obigen Eigenschaften in die Klassendefinition ein.
Die richtige Antwort auf das Äquivalent von
%Vor%ist daher
%Vor%Es wäre äquivalent und möglicherweise besser lesbar, dies zu tun:
%Vor%Tags und Links javascript ember.js