Meteor ES6胖箭头功能和ontreated中的`this`无法正常工作

时间:2016-07-31 08:36:54

标签: meteor ecmascript-6

抱歉,ES6 newb在这里:

Template.hello.onCreated( () => {
  // counter starts at 0
  this.counter = new ReactiveVar(0);
});

Template.hello.helpers({
  counter() {
    return Template.instance().counter.get();
  },
});

Template.hello.events({
  'click button'(event, instance) {
    // increment the counter when button is clicked
    instance.counter.set(instance.counter.get() + 1);
  },
});

当我点击按钮时,我得到Cannot read property 'get' of undefined

但是当我做的时候

Template.hello.onCreated( function(){
  // counter starts at 0
  this.counter = new ReactiveVar(0);
});

它工作正常。

所以ES6的this关键字的胖箭头绑定有什么问题我还没有?

1 个答案:

答案 0 :(得分:2)

当Meteor调用onCreated处理程序时,它会将函数的this值绑定到模板实例。 Arrow functions 词法绑定this,这意味着箭头函数中的this与定义函数的位置相同,在您的情况下可能{{1} }。因此,您正在创建全局变量window,而不是将其分配给模板实例。

对于counteronCreated等,使用箭头功能毫无意义。