2009-11-10 195 views
1

我有一個模塊的應用程序。每個模塊都是完全獨立的。他們之間沒有共享事件或其他任何事情。在每個模塊中都有一個DataGrid和一個ContextMenu。所選數據的詳細信息在一個彈出窗口中打開。像往常一樣,模塊由loalEventMap和presentationModel控制。配合:無法設置屬性模型

如果我立即關閉一個彈出窗口並再次打開,所有工作正常。但是,如果我改變,在彈出的一些數據,將其關閉,卸載我的模塊,再加載,然後再次打開彈出,伴侶引發以下錯誤:

  • ERROR: Unable to set property model on CDBInputMask because is not type CDBPresentationModel. Provided value was of type CDBPresentationModel
  • TARGET: CDBInputMask
  • TARGET KEY: model
  • TAG: PropertyInjector
  • FILE: CDBLocalEventMap
  • STACK TRACE: TypeError: Error #1034: Type Coercion failed: cannot convert com.mycomp.myMod.ui.presenters::[email protected] to com.mycomp.myMod.ui.presenters.CDBPresentationModel. at com.asfusion.mate.core::Binder/bind()[/Users/Nahuel 1/Documents/Flex Builder 3/Mate_trunk/src/com/asfusion/mate/core/Binder.as:90] at 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); 

inputMask = null; 注射器:

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

在伴侶,論壇,我發現有一個類似的線程,但不完全相同,問題。這裏的主持人意味着它看起來像試圖在模塊中兩次實例化一個類。在我的情況下,PopUpManager是一個單例類。所以它看起來像是同樣的問題。第一次通過所有的工作正常,第二次通過它崩潰,所有,因爲該類已被注入。

我試圖使用跟蹤調試器來查看如何清除彈出或清除模塊。但我還沒有找到解決方案。如果您需要更多代碼,我會發布它。

在此先感謝。 Frank

回答

1

聽起來像ApplicationDomain問題。

可能發生的情況是類定義在不同的安全域上被多次加載。儘管這些物體看起來像是同一類,但這會造成鑄造問題。就Flash運行時而言,它們不是同一類型,除非它們位於同一個安全域中。

要解決此給裝載機使用主應用程序的安全域上下文(假設你使用Loader類來加載模塊):

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