0
鉴于以下代码:为什么在这种情况下继承Event不起作用?
类CEvent的:
public class CEvent extends Event
{
public static const TYPE:String = "cEvent";
private var m_strCode:String;
public function get code():String
{
return m_strCode;
}
public function CEvent(pCode:String, bubbles:Boolean=false,
cancelable:Boolean=false)
{
super(TYPE, bubbles, cancelable);
m_strCode = pCode;
}
}
A类:
dispatchEvent(new CEvent(MY_CONST))
B类:
m_a = new A();
m_a.addEventListener(CEvent.TYPE, onCEvent);
.
.
.
private function onCEvent(pEvent:CEvent):void
{
switch (pEvent.code)
{
case A.MY_CONST:
dispatchEvent(pEvent);
}
}
C类:
m_b = new B();
m_b.addEventListener(CEvent.TYPE, onCEvent);
.
.
.
private function onCEvent(pEvent:CEvent):void
{ // breaks right here
}
我得到这个错误时,它打破在C级,从A类原调度之后:
Error #1034: Type Coercion failed: cannot convert flash.events::[email protected] to
<path>.CEvent.
这似乎并没有做出很大的意义,它似乎完全逆着继承的方式。即使在Adobe的dispatchEvent()实现中存在代码,该代码专门通过并删除通过继承添加的任何内容,并仅分派“正常”事件实例,但应该导致它在B类中中断,而不是C中的中断。
有人能解释一下吗?谢谢。
编辑:通过改变B类的代码来做到这一点的方式,而不是使一切工作只是罚款:
dispatchEvent(new CEvent(pEvent.code));
我还需要了解是什么问题,但。谢谢。
这是相当特定事件的事情,还是全部通过ActionScript?这是否意味着,至少对于重新调度自定义事件而言,每次都必须创建一个全新的对象,而不是只重复使用相同的引用? – Panzercrisis
是的,这是特定于事件的。我不知道原因,但Flash Player在重新分派时克隆事件。必须有一些很好的理由,但我从来没有找到原因。 'clone()'方法的[docs](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html#clone())只能说你必须在自定义事件中实现'clone()'... –