0

我正在尝试使用 Robotlegs 框架构建一个 Flex 应用程序,并且不知道如何仅在视图组件的 creationComplete 事件之后处理调解器的创建(-> onRegister 被调用)。

我的应用程序在启动时加载了几个 XML 文件,从文件中创建模型,然后使用数据发送事件。问题:在启动时“加载”嵌入式/本地文件时,模型事件在添加调解器侦听器之前被调度,尽管它们在触发主上下文中的初始数据加载之前被映射。

是否有人使用带有 flex 的机器人腿,并且找到了一种“更清洁”的方法,而不是在调解器 onRegister 中手动调度事件?这样做,“自动”调解将不再是自动的......

编辑:
最小示例代码:

语境:
override public function startup( ):void{
mediatorMap.mapView( EditorMenu, EditorMenuMediator );
commandMap.mapEvent( ContextEvent.STARTUP, LoadConfigurationCommand );
dispatchEvent( new ContextEvent( ContextEvent.STARTUP ) );
}

加载配置命令:
[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 加载”之前,因此在调度 XmlLoadedEvent 时中介没有侦听。

4

2 回答 2

1

我使用StateMachine来解决这个问题并控制操作顺序。这里的另一种方法是添加侦听器,但也注入模型并检查 onRegister 中的数据。任何一种方法都应该让你处于竞争条件的前面。

于 2011-04-19T14:51:41.207 回答
0

我不是 RobotLegs 方面的专家(我实际上是 Parsley 上瘾者),但是,如果您使用调解器模式,这意味着您的调解器可以直接访问视图本身。你如何为你的所有视图创建一个接口类,它有一个init公共函数,你的中介可以在 onRegister 之后调用它。

也许 Robotlegs 有另一种处理元数据或事件或其他东西的方法,但这仍然有效。

于 2011-04-19T12:12:13.087 回答