1

モジュールを含むアプリケーションがあります。すべてのモジュールは完全に自己完結型です。それらの間に共有イベントやその他のものはありません。各モジュールには、DataGrid と ContextMenu があります。選択したデータの詳細がポップアップ ウィンドウに表示されます。モジュールは通常どおり、loalEventMap と presentationModel によって制御されます。

ポップアップをすぐに閉じて再度開くと、すべて正常に動作します。しかし、ポップアップ内のデータを変更して閉じ、モジュールをアンロードし、モジュールを再度ロードして、ポップアップを再度開くと、Mate は次のエラーをスローします。

  • エラー: タイプが CDBPresentationModel ではないため、CDBInputMask にプロパティ モデルを設定できません。指定された値はタイプ CDBPresentationModel でした
  • ターゲット: CDBInputMask
  • ターゲットキー: モデル
  • タグリスト: プロパティインジェクター
  • ファイル: 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);

入力マスク = null; インジェクター:

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

Mate-Forum で、似ているが全く同じではない問題を抱えたスレッドを見つけました。ここで司会者は、モジュール内でクラスを 2 回インスタンス化しようとしているように見えることを意味しました。私の場合、PopUpManager はシングルトン クラスです。したがって、同じ問題のように見えます。クラスがすでに注入されているため、最初はすべて正常に動作し、2 回目はクラッシュします。

デバッガーとトレースを使用して、ポップアップをクリアする方法またはモジュールをクリアする方法を確認しようとしました。しかし、私は解決策を見つけていません。さらにコードが必要な場合は、投稿します。

前もって感謝します。フランク

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 に答える