我正在尝试使用Robotlegs框架构建Flex应用程序,并且不知道如何在视图组件的creationComplete事件之后处理调解器的创建( - > onRegister被调用)。
我的应用程序在启动时加载多个XML文件,从文件创建模型,然后使用数据调度事件。 问题:在启动时“加载”嵌入/本地文件时,模型事件在添加介体监听器之前被调度,尽管它们在触发主要上下文中的初始数据加载之前被映射。
是否有人使用带有flex的robotlegs并且在这方面采用“更清洁”的方式,而不是手动调度调解器onRegister中的事件?这样做“自动”调解就不会再自动了......
编辑:
最小的示例代码:
上下文:
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);
}
跟踪“菜单onregister”在跟踪“xml loaded”之前发生,因此调度器在调度XmlLoadedEvent时没有监听。
答案 0 :(得分:1)
我用StateMachine来解决这个问题并控制操作顺序。这里的另一种方法是添加侦听器,但也注入模型并在onRegister中检查数据。任何一种方法都应该让你在竞争条件面前。
答案 1 :(得分:0)
我不是RobotLegs的专家(我实际上是一个Parsley上瘾者),但是,如果您使用Mediator模式,这意味着您的中介可以直接访问视图本身。如何为所有具有init
公共函数的视图创建一个接口类,调度器可以在onRegister之后调用该接口类。
也许Robotlegs有另外一种方法可以使用元数据或事件或其他东西,但这仍然有效。