在FLEX中重新调度事件

时间:2009-02-09 08:51:18

标签: flex actionscript-3 events actionscript

在FLEX应用中,我正在尝试“重新发送”自定义事件。即component1执行dispatchEvnet(event),component2注册事件的处理程序,处理程序的唯一功能是dispatch(event)。最后,component3侦听来自component2的事件。我想要做的是类似于“重新抛出”异常的概念(和类似的原因)。不同之处在于重新分派似乎在AS3(Flash 10)中不起作用。在IE中,没有任何反应,在FF3中有一个例外,说在调用component3中的处理程序时尝试将Event类型强制转换为我的CustomEvent时类型转换失败。调试器中的跟踪代码显示,在调用component3时,事件确实是一般事件,我的所有自定义内容都丢失了。应该是这样吗?

2 个答案:

答案 0 :(得分:19)

您遇到的问题是由于未覆盖自定义事件中的clone()事件造成的。

重新调度事件时,会克隆并修改它们。如果你不覆盖clone(),你将得到clone()的基本实现,它返回一个Event。由于无法将Event强制转换为自定义事件类型,因此会引发运行时错误。

来自文档:

  

创建自己的自定义Event类时,必须覆盖继承的Event.clone()方法,以便复制自定义类的属性。如果未设置在事件子类中添加的所有属性,则当侦听器处理redispatched事件时,这些属性将没有正确的值。

答案 1 :(得分:0)