使用“内省”在Flex中我可以说:
var classInfo:XML=describeType(SomeObject);
将为我列出访问者,方法和变量。 (http://livedocs.adobe.com/flex/3/html/help.html?content=usingas_8.html)
但是,相当于以编程方式检查所有对象的可能事件?
(不仅仅是已经设置了事件监听器的事件,而是以某种方式逐步浏览了可能为其设置事件监听器的所有VALID事件的列表 - 我意识到这些列表很容易在线获得,这很好对于我在设计类型中知道对象类型的情况,但我需要某种方法在运行时以编程方式检查任何给定的displayobject,并确定哪些事件(如果有)与之相关或可能与之相关。)
答案 0 :(得分:2)
没有办法。
使用事件元数据标记定义的事件信息仅用于通过ASDocs进行代码提示和文档编制。它与组件可能会或可能不会触发的事件无关。
在任何时间点,一部分代码都可以调用“dispatchEvent”并调度该事件。这通常用于用于绑定的“somePropertyChanged”事件。这些事件很少(如果有的话)使用事件元数据进行记录。但是,该组件仍然会触发它们。
冒泡混淆了这个问题;因为如果组件的子项触发bubble属性为true的事件;然后它几乎与触发事件的组件相同。如果没有某种代码分析器,你会以编程方式解决这个问题吗?
也就是说,有一个编译器参数来保留元数据(在http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_14.html和http://jacwright.com/blog/72/using-your-own-custom-metadata-in-as3/保持as-3元数据)。
我相信如果你这样做,那么就有办法从组件中获取事件元数据;我以为使用describeType。但是,请记住元数据并不是事件的全部。