2016-05-25 4 views
0

Es scheint, dass ich Pfeilfunktionen nicht als Beobachter verwenden kann, funktioniert anonyme Methoden gut. Fehle ich etwas Entscheidendes, warum unterscheidet sich der Kontext?Ember - Object Eigenschaftenbeobachter

ember.debug.js:32096 TypeError: _this3.get is not a function 
    at .sessionChanged (session.js:77) 
    at Object.applyStr (ember.debug.js:23331) 
    at Object.sendEvent (ember.debug.js:16842) 
    at ObserverSet.flush (ember.debug.js:20171) 
    at endPropertyChanges (ember.debug.js:20682) 
    at Object.changeProperties (ember.debug.js:20707) 
    at Object.setProperties [as default] (ember.debug.js:21786) 
    at exports.default._emberMetalMixin.Mixin.create.setProperties (ember.debug.js:35465) 
    at invalidate (session.js:98) 
    at session.js:42 

Anonyme Funktion - Works.

Beobachtermethode mit Pfeilfunktion - löst Ausnahme aus.

/** 
    * Session event observer. 
    */ 
    sessionChanged: Ember.observer('user',() => { 
    // Get the user value 
    const user = this.get('user'); 

    // Get the session token 
    const token = this.get('token'); 

    console.log(user, token); 
    }), 
+0

Siehe auch http://stackoverflow.com/questions/36613693/how-is-the-a-value-of-this-in-embers-js-computed-property-defined. –

Antwort

4

Pfeil Funktionen sind eine ES6-Funktion, die in Ember.js mit Babel.js transpiled wird. Arrow-Funktionen sind eine kürzere Notation, die den aktuellen Kontext implizit an die definierte Funktion binden.

In Ihrem Fall ist der aktuelle Kontext nicht definiert, da die Definition innerhalb eines Moduls erfolgt und die oberste Ebene this in einem Modul in Babel ES6 nicht definiert ist. (siehe http://exploringjs.com/es6/ch_modules.html)

Es funktioniert mit anonymen Funktionen, weil Ember Ihren Objektkontext explizit daran binden. Mit Pfeilfunktionen kann das nicht getan werden, da Babel die Bindung automatisch durchführt.

+0

Danke für die Klarstellung. – user634545