AS3事件 - 类型转换失败?

3

我正在从子swf向父级swf分派事件。在没有使用预加载器swf加载父级之前,它一直正常工作,但是现在父级不再能够接收来自子级的事件。我现在遇到以下错误:

TypeError: Error #1034: Type Coercion failed: cannot convert com.company.events::MyCustomEvent@22494251 to com.company.events.MyCustomEvent.
    at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()

这是什么意思?为什么只有在将主swf包装在加载器中时才会发生这种情况?感谢任何帮助 - 我很绝望!
2个回答

4
听起来像是一个ApplicationDomain问题。
尝试这样做:
public function loadSWF(url:String):void 
{
    var req:URLRequest = new URLRequest(url);
    var cxt:LoaderContext = new LoaderContext();
        cxt.applicationDomain = ApplicationDomain.currentDomain;

    var ldr:Loader = new Loader();
        ldr.load(req, cxt);
}

非常感谢。我正在使用BulkLoader,所以我必须进行修改,但现在它可以工作了。你能告诉我为什么吗?我无法理解这个context/applicationDomain的东西。我之前成功地加载了子swf文件 - 为什么在将主swf包装在加载器中时事件处理会出问题? - sol
4
ApplicationDomains代表不同的类“世界”。当你加载外部SWF时,通常它的类将存在于与加载它的SWF中的类不同的ApplicationDomain中。这就是您原始代码的工作方式,并导致在加载的SWF中命名为“MyCustomEvent”的类被认为是与加载它的SWF中的“MyCustomEvent”完全不同的类,因为每个类位于不同的ApplicationDomain中。CodedSignal的代码使得SWF的类应该加载到相同的ApplicationDomains中,因此它的MyCustomEvent不会被视为不同的类。 - IQpierce
你拯救了我的一天,IQpierce!谢谢!! - Rihards

1
为什么将主SWF包装在加载器中会导致事件处理出现问题?
它并不是真正的“出现问题”……更多的是每个SWF的方法和属性都有命名空间,以便在您将随机SWF(比如广告)加载到您的Shell应用程序中时,不会发生冲突,因为子级中的事件被父级捕获并沿着显示列表向上传递而引起混乱。
这确实有点神秘,所以不要担心感到困惑。您可以在此处找到一个很好的概述。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接