Apache flex 获取特定组件上的所有事件侦听器

Apache flex 获取特定组件上的所有事件侦听器,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我在flex中有一个应用程序,它有一些现成的组件和许多自定义组件和事件 我想在运行时获得特定组件上的所有事件侦听器,我知道如何使用monkey修补框架,但我不想使用monkey修补程序,也不能在生产中依赖它 有办法吗?你不行。您只需使用自定义组件并覆盖addEventListener即可收集信息。我真的不明白为什么猴子修补不起作用。Flex功能强大,但设计拙劣,我想你只能接受它。的公共界面非常纤薄: addEventListener dispatchEvent hasEventListener

我在flex中有一个应用程序,它有一些现成的组件和许多自定义组件和事件

我想在运行时获得特定组件上的所有事件侦听器,我知道如何使用monkey修补框架,但我不想使用monkey修补程序,也不能在生产中依赖它


有办法吗?

你不行。您只需使用自定义组件并覆盖addEventListener即可收集信息。我真的不明白为什么猴子修补不起作用。Flex功能强大,但设计拙劣,我想你只能接受它。

的公共界面非常纤薄:

  • addEventListener
  • dispatchEvent
  • hasEventListener
  • removeEventListener
  • willTrigger
这意味着侦听器列表不会公开。您只能判断特定类型的事件是否至少有一个事件侦听器


我会重新审视你为什么要做你想做的事。在典型的示例中,侦听器列表并不打算公开。我有一种强烈的感觉,如果您试图获得该列表,那么您正在从错误的方向处理更高级别的问题。

+1。通常,当提出此问题时,较高级别的问题只是由于未移动的处理程序而导致的内存泄漏。:)@也许通常都是这样我可以向你保证不是我的情况。我试图通过SWFLoader访问已编译的应用程序,并获取特定对象上的所有事件侦听器。其概念是构建某种测试框架@詹姆斯根本帮不了我什么。谢天谢地,这种需求不是monkey patch,应用程序的概念是一个应用程序通过SWFLoader消费另一个应用程序并显示有关它的数据。类似于FxSpy only的东西我也需要事件部分。@KensoDev:在这种情况下,您唯一的选择是在加载应用程序之前修改它,以提供必要的钩子来收集您需要的信息。这可以在AVM2上完成,将swf加载到ByteArray中,对其进行修改,然后将其加载到加载程序中。或者等到AVM2支持AOP和运行时/引导时编织。