当我针对特定任务执行右键单击选项超过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;时间也。我是烬人的新手。您的帮助将不胜感激。提前谢谢。
答案 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)时,无论如何都会为你提供翻译。