我基本上有一个类:
public class WindowEvent extends Event
{
public static const WARNEVENT:String = "warnEvent";
public static const TASKREQEVENT:String = "taskRequestEvent";
public static const TASKANNOUNCE:String = "taskAnnounce";
public static const WINDOWCHANGE:String = "windowChange";
public static const ILLEGALPOSITION:String = "illegalPosition";
// insert brevity
}
前四个事件工作正常,但我只是添加了
ILLEGALPOSITION
并尝试了这个: // inside Window.as
private function checkDimensions():void {
if(!Window._legalBoundaryEnable)
return;
... var pass:Boolean = Window.legalBoundary.containsRect(
455 this.getBounds(stage));
456 if(!pass) {
457 this.dispatchEvent(new WindowEvent(WindowEvent.ILLEGALPOSITION,
... "Illegal Position etc."));
}
}
所以当我点击 dispatch 方法时,Flex 向我吐出这个堆栈:
类型错误:错误 #1034:类型强制失败:无法转换 ¬
flex.utils.ui::WindowEvent@511dce41 到 flash.events.MouseEvent。
在 flash.events::EventDispatcher/dispatchEventFunction()
在 flash.events::EventDispatcher/dispatchEvent()
在 mx.core::UIComponent/dispatchEvent() ¬
[C:\autobuild\~\UIComponent.as:9298]
在 flex.utils.ui::Window/checkDimensions()[C:\Users\~\Window.as:457]
在 flex.utils.ui::Window/stageResized()[C:\Users\~\Window.as:220]
从跟踪中可以看出,
Window.as:457
是最后一行用户代码。那么 WTF 是 flash.events.EventDispatcher.dispatchEventFunction
试图使用 MouseEvent
吗?
最佳答案
该错误的发生通常是因为您设置的监听器具有不正确的事件参数类型。我很确定这一定是这里的情况。
检查您为该事件设置的所有监听器,并确保该函数是
someFunction(event : WindowEvent) : void
关于apache-flex - Flex Type Coercion,我认为它已经失去了精神,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/789627/