2016-05-25 9 views
0

私はオブザーバとして矢印関数を使用できないようですが、匿名メソッドは正常に動作します。私は何かが欠けている、なぜ文脈が違うのですか?Ember - オブジェクトのプロパティオブザーバ

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 

匿名機能 - Works。

arrow関数を使用したオブザーバーメソッド - 例外をスローします。

+0

http://stackoverflow.com/questions/36613693/how-is-the-a-value-of-this-in-ember-js-computed-property-definedも参照してください。 –

答えて

4

Arrow機能は、Babel.jsを使用してEmber.jsに転送されるES6機能です。 矢印関数は、現在のコンテキストを暗黙的に定義された関数に結びつける短い記法です。

モジュール内で定義が行われ、モジュール内のトップレベルthisがBabel ES6で定義されていないため、現在のコンテキストは未定義です。 (http://exploringjs.com/es6/ch_modules.htmlを参照)

これは、匿名関数を使用して動作します。これは、emberがオブジェクトコンテキストを明示的にバインドするためです。 Babelは自動的にバインディングを行うため、矢印機能ではできません。

+0

説明をありがとう。 – user634545

関連する問題