【发布时间】:2015-02-11 00:24:12
【问题描述】:
return new Ext.Button({
text: cfg.text,
menu: {
xtype: 'menu',
items: cfg.menu,
listeners: {
itemclick: {
fn: function() {
console.log(this);
this.fireEvent('tabchange', 'apps');
},
scope: this
},
scope: this
},
scope: this
},
minWidth: 50,
scope: this
});
cfg 作为函数的参数出现。这一切都在那里。 Console.log 有效 - 因此直到那时的代码也有效。 这似乎确实在正确的范围内。
然而,fireEvent 的结局是:
未捕获的类型错误:无法读取未定义的属性“应用”
在错误日志中的调用之后,fireEvent 确实被执行,它到达了
EXTUTIL.Event.fire
if(l && l.fireFn.apply(l.scope || me.obj || window, args) === FALSE)
失败的地方。
尝试在事件侦听器中调用事件时是否存在某种范围/嵌套问题?
我的目标是在按钮的菜单项选择上触发该事件。
【问题讨论】:
-
您是否使用断点检查了范围(this)??
-
如果我在每一步都特别添加了范围,范围仍然会出错吗?如果我没有添加范围:this - 我最终会得到未定义的 fireEvent。我也可以通过它访问其他变量、函数。我假设在该类中查找自定义事件并且找不到它时,fireEvent 仍然超出范围。这些事件在 initComponent 中设置为 this.addEvents()。 fireEvent 上的断点确实显示了正确的范围 - 并且列出了该事件。
-
AH - 逐步调试,似乎其中一个侦听器未定义。这仍然让我感到困惑 - 因为如果它在差异按钮处理程序中,同样的事件可以正常工作。
标签: extjs scope dom-events extjs3