Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在运行时知道哪些事件侦听器注册到ExtJS中的组件?_Extjs_Extjs4.2 - Fatal编程技术网

如何在运行时知道哪些事件侦听器注册到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