因此,我正在尝试ES6,安装了grigio:babel软件包,并在遇到问题时开始浏览es5代码并将其更新为某些新的ES6语法。
最初,我的模板助手看起来像这样:
Template.exampleTemplateName.helpers({
exampleHelper: function() {
//returns an array from Mongo Collection
}
});
像这样在Blaze的每个循环中使用
{{#each exampleHelper}}
{{/each}}
如您所料,我在此事件循环中所有元素的事件处理程序都可以访问exampleHelper
通过this
关键字返回的Mongo Collection中的字段。this.exampleField
将完全返回我期望它返回的结果。
现在是我开始更新到ES6的时候了。出于某种原因,以下语法破坏了数据上下文,因此this
,它不返回期望的内容,而是返回Window
:
Template.exampleTemplateName.helpers({
exampleHelper() {
//returns an array from Mongo Collection
}
});
以上是我的第一次尝试,然后尝试了:
Template.exampleTemplateName.helpers({
exampleHelper: () => {
//returns an array from Mongo Collection
}
});
因此,我通过Babeljs的在线翻译器运行了上述ES6代码,并收到了以下内容,这显然是错误的,因为我不想使用命名函数:
Template.exampleTemplateName.helpers({
exampleHelper: function exampleHelper() {}
});
有人可以告诉我正确的语法是什么样吗?
有人可以告诉我正确的语法是什么样吗?
您的原始代码完全可以。您不必滥用功能就可以使用它们,节省一些按键等,在这种情况下,应该使用常规的匿名功能。
之所以对this
指向全局对象感到困惑,是因为箭头函数是这样工作的:它们具有词法 this
而不是动态的。这意味着this
在函数创建时(在您的情况下为window
)静态将引用静态绑定到函数上下文,而不是在运行时动态解析。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句