Robotlegs フレームワークを使用して Flex アプリケーションを構築しようとしていますが、ビュー コンポーネントの creationComplete イベントの後でのみ、メディエーターの作成 (-> onRegister が呼び出されます) を処理する方法がわかりません。
私のアプリケーションは起動時にいくつかの XML ファイルをロードし、モデルはファイルから作成され、データとともにイベントをディスパッチします。問題: 起動時に埋め込み/ローカル ファイルを「ロード」すると、モデル イベントはメディエーター リスナーが追加される前にディスパッチされますが、メイン コンテキストで初期データ ロードをトリガーする前にモデル イベントがマップされます。
メディエーター onRegister でイベントを手動でディスパッチするよりも、flex で robotlegs を使用していて、これを回避する「よりクリーンな」方法を見つけた人はいますか? そうすることで、「自動」メディエーションはもはや自動ではなくなります...
編集:
最小限のコード例:
環境:
override public function startup( ):void{
mediatorMap.mapView( EditorMenu, EditorMenuMediator );
commandMap.mapEvent( ContextEvent.STARTUP, LoadConfigurationCommand );
dispatchEvent( new ContextEvent( ContextEvent.STARTUP ) );
}
LoadConfiguration コマンド:
[Inject] public var configurationService:IXMLLoader;
override public function execute():void{
configurationService.loadXML();
}
構成サービス:
public function loadXML(){
trace( "xml loaded" );
dispatch( new XMLLoadedEvent( XMLLoadedEvent.CONFIGURATION_LOADED, result ) );
}
EditorMenuMediator:
override public function onRegister( ):void{
trace( "menu onregister" );
addContextListener( XMLLoadedEvent.CONFIGURATION_LOADED, handleXmlLoaded, XMLLoadedEvent);
}
トレース「menu onregister」は、トレース「xml loaded」の前に発生しているため、メディエーターは XmlLoadedEvent がディスパッチされたときにリッスンしていません。