0

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 がディスパッチされたときにリッスンしていません。

4

2 に答える 2

1

StateMachineを使用してこれに取り組み、操作の順序を制御します。ここでの別のアプローチは、リスナーを追加するだけでなく、モデルを注入して onRegister のデータをチェックすることです。どちらのアプローチでも、競合状態の前に置く必要があります。

于 2011-04-19T14:51:41.207 に答える
0

私は RobotLegs の専門家ではありません (私は実際にはパセリ中毒者です) が、メディエーター パターンを使用している場合、それはメディエーターがビュー自体に直接アクセスできることを意味します。initメディエーターが onRegister の後に呼び出すことができるパブリック関数を持つすべてのビューのインターフェイス クラスを作成するのはどうですか。

Robotlegs には、メタデータやイベントなどを使用して別の方法があるかもしれませんが、これはまだ有効です。

于 2011-04-19T12:12:13.087 に答える