使用箭头函数作为观察者失败?

时间:2016-05-25 09:12:26

标签: ember.js

似乎我不能使用箭头函数作为观察者,匿名方法工作正常。我错过了一些关键的东西,为什么背景不同?

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

匿名功能 - 工作。

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

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

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

使用箭头功能的观察者方法 - 抛出异常。

  /**
   * 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);
  }),

1 个答案:

答案 0 :(得分:5)

箭头功能是ES6功能,使用Babel.js在Ember.js中进行转换。 箭头函数是一种较短的符号,它还将当前上下文隐式绑定到已定义的函数。

在您的情况下,当前上下文未定义,因为定义发生在模块内,并且模块中的顶级this在Babel ES6中未定义。 (见http://exploringjs.com/es6/ch_modules.html

它使用匿名函数,因为ember显式地将对象上下文绑定到它。它不能用箭头功能,因为Babel会自动进行绑定。