我有三个类:A,B,C。类A调度一个事件,类B将处理它然后调度它C.但是,我在B的dispatchEvent函数中得到了这个奇怪的类型转换错误,如下所示:
public function handler(event:SomeEvent):void {
removeEventListeners();
dispatchEvent(event);
}
如果我将其更改为以下内容,那么我不会收到任何错误:
public function handler(event:SomeEvent):void {
removeEventListeners();
var newEvent:SomeEvent = event.clone(); //create a clone of itself
dispatchEvent(newEvent);
}
任何人都可以帮我这个吗?谢谢。
答案 0 :(得分:4)
您使用的是自定义活动吗?如果是,那么您需要定义克隆方法。当您“重新发送”事件时,闪存会自动克隆事件并调度克隆。这就是为什么当你将代码更改为event.clone()时它的工作原理。所以,简而言之,你的第二个实现是正确的。
如果您不想编写额外的代码,则应实现克隆方法。 EventDispatcher.dispatchEvent()的文档解释了这一点:http://help.adobe.com/en_US/AS3LCR/Flash_10.0/
答案 1 :(得分:0)
你可以这样做。
public function handler(event:SomeEvent):void {
removeEventListeners();
dispatchEvent(event.clone);
}
您需要克隆事件。一旦发送它们,除非克隆,否则不能重新发送。我不确定为什么会这样,也许与处理程序进入无限循环有关。
正如大量参与声明的那样,如果它是自定义的,您应该在事件上实现克隆方法。所有这一切需要做的是返回你的类型的新事件,复制任何状态/变量。