1

我有一个带有模块的应用程序。每个模块都是完全独立的。它们之间没有共享事件或其他任何东西。在每个模块中都有一个 DataGrid 和一个 ContextMenu。所选数据的详细信息在弹出窗口中打开。这些模块像往常一样由 loalEventMap 和presentationModel 控制。

如果我立即关闭弹出窗口并再次打开它,一切正常。但是如果我更改了弹出窗口中的一些数据,关闭它,卸载我的模块,再次加载模块,然后再次打开弹出窗口,Mate 会抛出以下错误:

  • 错误:无法在 CDBInputMask 上设置属性模型,因为不是类型 CDBPresentationModel。提供的值为 CDBPresentationModel 类型
  • 目标:CDBInputMask
  • 目标键:型号
  • 标签:PropertyInjector
  • 文件:CDBLocalEventMap
  • 堆栈跟踪:TypeError:错误 #1034:类型强制失败:无法将 com.mycomp.myMod.ui.presenters::CDBPresentationModel@5d13cf1 转换为 com.mycomp.myMod.ui.presenters.CDBPresentationModel。在 com.asfusion.mate.core::Binder/bind()[/Users/Nahuel 1/Documents/Flex Builder 3/Mate_trunk/src/com/asfusion/mate/core/Binder.as:90] 在 com.asfusion .mate.actions::PropertyInjector/run()[/Users/Nahuel 1/Documents/Flex Builder 3/Mate_trunk/src/com/asfusion/mate/actions/PropertyInjector.as:205]

我的实现:


打开弹出窗口:

    inputMask = new CDBInputMask();
    PopUpManager.addPopUp(inputMask,this,true);

关闭弹出窗口:

 PopUpManager.removePopUp(inputMask);

输入掩码 = 空;注射器:

 <Injectors target="{CDBInputMask}" debug="true" dispatcherType="global" >

在 Mate-Forum 中,我发现了一个有类似但不完全相同的问题的线程。在这里,主持人的意思是它看起来像是试图在一个模块中实例化一个类两次。就我而言, PopUpManager 是一个单例类。所以它看起来像同样的问题。第一次通过一切正常,第二次通过它崩溃,都是因为类已经被注入。

我尝试使用带有跟踪功能的调试器来查看如何清除弹出窗口或清除模块。但我还没有找到解决办法。如果您需要任何进一步的代码,我会发布它。

提前致谢。坦率

4

1 回答 1

1

听起来像 ApplicationDomain 问题。

可能发生的情况是类定义在不同的安全域上被多次加载。尽管对象看起来属于同一类,但这将导致转换问题。就 Flash 运行时而言,它们不是同一类型,除非它们位于同一安全域中。

要解决这个问题,请给加载器一个上下文,其中包含您使用的主应用程序的安全域(假设您正在使用 Loader 类来加载您的模块):

var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
loader.loader(request, context);
于 2009-11-11T04:44:04.920 回答