流星:为什么我通过将function(){}切换为()=> {}来丢失数据上下文?

克里斯

因此,我正在尝试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() {}
});

有人可以告诉我正确的语法是什么样吗?

dfsq

有人可以告诉我正确的语法是什么样吗?

您的原始代码完全可以。您不必滥用功能就可以使用它们,节省一些按键等,在这种情况下,应该使用常规的匿名功能。

之所以对this指向全局对象感到困惑,是因为箭头函数是这样工作的:它们具有词法 this而不是动态的这意味着this在函数创建时(在您的情况下为window静态将引用静态绑定到函数上下文,而不是在运行时动态解析。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Linux为什么不通过TSS使用硬件上下文切换?

切换内容演示者的属性,将完整的数据上下文传递给子级?

使用 SQLite 数据库将适配器 onBindViewHolder itemView 上下文转换为类上下文

为什么进行上下文切换时Linux为什么保存%ebp?

jQuery:将数据从输入切换为文本并返回

为什么在我的数据中调用转置将行的索引从MultiIndex切换为Flat Index?

如何通过将手机切换为横向模式而不影响流视频来切换到全屏

为什么subscribeOn方法不切换上下文?

为什么perf具有如此高的上下文切换?

为什么“ perf stat”显示0个上下文切换?

流星:什么是“数据上下文”?

我的线程可以帮助OS决定何时进行上下文切换吗?

我需要在哪里切换激活上下文?

“非自愿上下文”切换是什么意思?

Goroutines切换时,CPU上下文会发生什么?

“自愿上下文切换”到底是什么?

在alarm()中间上下文切换的行为是什么?

上下文切换

为什么将绑定数据上下文设置为控件的数据上下文?

为什么上下文切换是一个昂贵的过程,又是什么呢?

协程比 Kotlin 中的线程快吗?为什么?如何获得“上下文切换”的时间?

为什么我的数据库上下文被处置

什么是(确切地)“列表上下文”(和“字符串上下文”)?

控制器功能如何将数据从假切换为真

将纹理图像加载到平面(上下文丢失)

VBAR_EL寄存器是否通过上下文切换保存在ARM中?

通过Akka应用程序中的上下文切换来提高CPU使用率

我可以在运行 helm upgrade 命令期间切换 k8s 上下文吗?

在Linux中两个进程之间进行上下文切换期间会发生什么?