在ember中获得未被捕获的错误

时间:2018-05-16 09:11:59

标签: javascript ember.js

当我针对特定任务执行右键单击选项超过5次(大约)时,它会显示未捕获的错误,如下所示:

Uncaught TypeError: Cannot read property 'find' of undefined
    at Class.<anonymous> (core.js:21487)
    at fn (core.js:7779)
    at DeferredActionQueues.flush (core.js:7723)
    at Backburner.end (core.js:7738)
    at Backburner.run (core.js:7748)
    at executeTimers (core.js:7824)
    at core.js:7822

在那个地方,我有以下代码:

Ember.run.later(view, function () {
    this.$().find('menu-item:eq(0)').focus();
}, 125);

任何人都可以建议我为什么会出现这个错误,我需要在右键单击任务时避免此错误。&#34; n&#34;时间也。我是烬人的新手。您的帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:5)

这是一个简单的JavaScript问题。在第二行this.$()返回undefined,因此无法在未定义时调用.find

更有趣的是为什么 this.$()未定义。您可能在组件中包含此代码,并尝试访问本地jQuery instance。但是,您可以在匿名function(){}内调用它,这会破坏您的this - 上下文(因为它会获得一个新的上下文)。

这里最好的解决方案是使用箭头功能:

Ember.run.later(view, () => {
  this.$().find('menu-item:eq(0)').focus();
}, 125);

这可以防止外部this上下文,这很好。另一个选择是保存这个:

const self = this;
Ember.run.later(view, function () {
  self.$().find('menu-item:eq(0)').focus();
}, 125);

或者你可以.bind(this)

Ember.run.later(view, (function () {
  this.$().find('menu-item:eq(0)').focus();
}).bind(this), 125);

我绝对可以推荐第一个选项,特别是在使用ember(-cli)时,无论如何都会为你提供翻译。