配合:无法设置属性模型

时间:2009-11-10 12:58:34

标签: flex module mate

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

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

  
      
  • 错误:无法在CDBInputMask上设置属性模型,因为它不是CDBPresentationModel类型。提供的值为CDBPresentationModel
  • 类型   
  • TARGET:CDBInputMask
  •   
  • TARGET KEY:model
  •   
  • 标签: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]
  •   

我的实施:


打开Popup:

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

关闭Popup:

 PopUpManager.removePopUp(inputMask);

inputMask = null; 注射器:

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

 

在Mate-Forum中,我找到了一个类似但不完全相同的问题。在这里,主持人意味着它似乎试图在模块中实例化两次类。在我的例子中,PopUpManager是一个单例类。所以它看起来像是同样的问题。第一次通过所有工作都很好,第二次通过它崩溃,都是因为课程已经注入了。

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

提前致谢。 弗兰克

1 个答案:

答案 0 :(得分:1)

听起来像ApplicationDomain问题。

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

要解决此问题,请为加载程序提供使用主应用程序安全域的上下文(假设您使用Loader类加载模块):

var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
loader.loader(request, context);