About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Nov

    14

    在使用 Robotlegs2  (简称RL2)作为 MVC 设计框架时,Adobe AIR 如果采用了多个窗口,那么如果生成子窗口(独立窗口),它所对应的 mediator 并不会自动创建。这是因为 Context 是以当前舞台作为上下文背景,而独立的子窗口在生成时,它拥有自己的舞台实例,并不与主窗口共享同一个舞台实例。这在 RL1 中比较难以解决的问题,在 RL2 中比较很容易解决。

    默认情况下,在 AppConfig.as 中配置好了映射,并不会进行多窗口通信,还需要打开子窗口时进行类似如下的操作:

    先在打开的操作处添加视图管理的注入:

    [Inject] 
    public var viewManager:IViewManager;

    然后在视图管理对象中先加到这个子窗口对象(打开之后可以直接移除它):

    var someWin:SomeWindowView = new SomeWindowView ();
    viewManager.addContainer(someWin);
    someWin.open();
    viewManager.removeContainer(someWin);

    如果在打开后没有在视图管理对象中移除,那么也可以在子窗口对应的 mediator 对象中注入 viewManager 与 view 对象,然后在 destroy() 方法中移除它。 

    override public function destroy():void
    {
        super.destroy();
        trace(this,"destroy()");

        viewManager.removeContainer(view);
    }