Robotlegs Flex - Как справиться с инициализацией посредников после creationComplete? - PullRequest
0 голосов
/ 19 апреля 2011

Я пытаюсь создать приложение Flex с использованием инфраструктуры Robotlegs и не знаю, как справиться с созданием посредников (вызывается -> onRegister) только после события creationComplete компонента представления.

Мое приложение загружает несколько файлов XML при запуске, модели создаются из файлов и затем отправляют события вместе с данными. Проблема: при «загрузке» встроенных / локальных файлов при запуске события модели отправляются до того, как добавляются прослушиватели посредников, хотя они отображаются до запуска начальной загрузки данных в главном контексте.

Кто-нибудь использует роботолег с flex и имеет более «чистый» способ обхода, чем ручная отправка события посредникам onRegister? При этом «автоматическое» посредничество больше не будет автоматическим ...

Edit:
Минимальный пример кода:

Контекст:
override public function startup( ):void{
mediatorMap.mapView( EditorMenu, EditorMenuMediator );
commandMap.mapEvent( ContextEvent.STARTUP, LoadConfigurationCommand );
dispatchEvent( new ContextEvent( ContextEvent.STARTUP ) );
}

LoadConfigurationCommand:
[Inject] public var configurationService:IXMLLoader;
override public function execute():void{
configurationService.loadXML();
}

ConfigurationService:
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); }

Трассировка «регистрация меню» происходит задолго до трассировки «загрузка XML», поэтому посредник не прослушивает, когда отправляется событие XmlLoadedEvent.

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

Я подхожу к этому с помощью StateMachine и беру контроль за порядком операций. Другой подход заключается в том, чтобы добавить слушателя, но также внедрить модель и проверить ее на наличие данных в onRegister. Любой подход должен поставить вас перед условиями гонки.

0 голосов
/ 19 апреля 2011

Я не эксперт в RobotLegs (на самом деле я наркоман Parsley), однако, если вы используете шаблон Mediator, это означает, что ваш посредник имеет прямой доступ к самому представлению. Как насчет того, чтобы создать интерфейсный класс для всех ваших представлений, который имеет init публичную функцию, которую ваш посредник может вызывать после onRegister.

Возможно, у Robotlegs есть другой способ сделать это с метаданными, событиями или чем-то еще, но это все еще допустимо.

...