在dispatchEvent中键入强制转换错误

时间:2009-12-01 00:00:53

标签: actionscript-3

我有三个类: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);
 }

任何人都可以帮我这个吗?谢谢。

2 个答案:

答案 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);
 }

您需要克隆事件。一旦发送它们,除非克隆,否则不能重新发送。我不确定为什么会这样,也许与处理程序进入无限循环有关。

正如大量参与声明的那样,如果它是自定义的,您应该在事件上实现克隆方法。所有这一切需要做的是返回你的类型的新事件,复制任何状态/变量。