如何在运行时知道哪些事件侦听器注册到ExtJS中的组件?
我正在尝试调试一个问题,其中一个事件被触发了两次。我只是好奇,想知道是否有办法知道在运行时有多少事件监听器注册到一个组件如何在运行时知道哪些事件侦听器注册到ExtJS中的组件?,extjs,extjs4.2,Extjs,Extjs4.2,我正在尝试调试一个问题,其中一个事件被触发了两次。我只是好奇,想知道是否有办法知道在运行时有多少事件监听器注册到一个组件 例如,假设我有一个按钮,使用浏览器控制台中的一些代码,我可以看到所有附加到该按钮的事件侦听器。有什么想法吗?我想你不能这么做,但是你可以使用hasListener(eventName)方法询问是否有一个具体事件的侦听器:你可以在开发工具的DOM资源管理器(至少在Firefox中)中看到所有事件侦听器连接到你的DOM 单击ev按钮。我找到了一种方法,可能并不优雅,但对我来说很
例如,假设我有一个按钮,使用浏览器控制台中的一些代码,我可以看到所有附加到该按钮的事件侦听器。有什么想法吗?我想你不能这么做,但是你可以使用hasListener(eventName)方法询问是否有一个具体事件的侦听器:你可以在开发工具的DOM资源管理器(至少在Firefox中)中看到所有事件侦听器连接到你的DOM
单击
ev
按钮。我找到了一种方法,可能并不优雅,但对我来说很有用。唯一的要求是至少要有选择器查询的一部分,如果您提供一个itemId,那么它可以很好地工作
只需执行以下函数,将itemId作为选择器传递
>> function showListeners(selector) {
var regexp = new RegExp('(^|\\s)'+selector+'(?=\\s|$)'),
bus = Ext.app.EventDomain.instances.component.bus;
for(var i in bus) {
var selectors = Object.keys(bus[i]);
for(var j in selectors) {
if(regexp.test(selectors[j])) {
console.log("selector: '" + selectors[j] +
"'\n on -> " + i + " : " + Object.keys(bus[i][selectors[j]])[0]);
}
}
}
}
>> showListeners('#wizardWindow')
这将返回如下内容(只是一个示例):
它基本上会告诉哪个控制器为给定组件注册了事件侦听器(如果找到)
我希望有人会觉得这很有用。发布了一个名为chrome的chrome扩展。该工具为您提供了有关sencha应用程序的大量信息。它还提供了一个事件记录功能,可以捕获触发的任何事件以及触发这些事件的组件。你可以看看它有多有用。我觉得这在很大程度上是有帮助的 其想法是使用ExtJS组件,而不是在DOM级别。但是谢谢你的提示,老实说,我直到现在才听说这个chrome扩展。它确实提供了很多有用的信息!但我担心它不能满足我的特定需求,即知道有多少侦听器连接到任何给定组件。我一直在自吹自擂,找不到任何方法来获取这些信息。
> selector: '#mainContainer #wizardWindow'
on -> beforerender : home.WizardController
> selector: '#mainContainer #wizardWindow'
on -> afterrender : home.WizardController