2010-03-03 44 views
1

如果我这样做ActionScript 3事件转发非法?

stuff.addEventListener(FooEvent.NAME, function(e:FooEvent) { 
    dispatchEvent(e); 
} 

我得到一个运行时错误说,事件不能转换为FooEvent。 然而,它工作正常,如果我做的:

stuff.addEventListener(FooEvent.NAME, function(e:FooEvent) { 
    dispatchEvent(new FooEvent(e.things)); 
} 

为什么?

回答

3

dispatchEvent调用clone对传递的事件,如果该事件已被“使用”(即已被调度)。从你说的话,我相当肯定你没有重写FooEventclone -method,因此它使用Event的实现,它返回一个普通的香草Event。这是你错误的根源。

您需要覆盖FooEvent中的clone方法,以便返回FooEvent的适当实例。