似乎我不能使用箭头函数作为观察者,匿名方法工作正常。我错过了一些关键的东西,为什么背景不同?
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);
}),
答案 0 :(得分:5)
箭头功能是ES6功能,使用Babel.js在Ember.js中进行转换。 箭头函数是一种较短的符号,它还将当前上下文隐式绑定到已定义的函数。
在您的情况下,当前上下文未定义,因为定义发生在模块内,并且模块中的顶级this
在Babel ES6中未定义。 (见http://exploringjs.com/es6/ch_modules.html)
它使用匿名函数,因为ember显式地将对象上下文绑定到它。它不能用箭头功能,因为Babel会自动进行绑定。