所以我开始在Meteor
中使用ES6,但显然如果您尝试使用带有箭头功能的Meteor.publish
语法,this.userId
未定义,而如果您使用常规function(){}
this.userId
工作得很完美,我假设是一种转换程序,为userId
指定一个不同的,但只是一个猜测,有谁知道到底发生了什么?
Meteor.startup(function() {
Meteor.publish("Activities", function() { //with function
console.log(this.userId); //TS8vTE3z56LLcaCb5
});
});
Meteor.startup(function() {
Meteor.publish("Activities", ()=> { //with arrow function
console.log(this.userId); //undefined
});
});
答案 0 :(得分:7)
这不是一个转换错误,它是箭头函数的feature。箭头函数自动将函数体的上下文设置为它在此处创建的上下文,在本例中是对Meteor.publish
的回调。这可以防止Meteor重新绑定侦听器函数的上下文。
来自流星publish docs:
在函数内部,这是发布处理程序对象
如果你想让事情正常运作,你需要使用"老派"函数语法,允许Meteor正确设置上下文。