Flex和假Mxml初始化而不实际显示组件,(更多内部)

时间:2009-02-26 14:21:10

标签: flex flash actionscript-3 user-interface events

我有一个TitleWindow mxml类,它有几个组件和监听器。 在其creationComplete和init状态中,我添加了一些侦听其gui上的事件的侦听器。

此TitleWindow仅在用户点击“按钮”时显示,我使用以下代码使TitleWindow成为单身:

public static function getInstance():MyWindow
{
    if ( MyWindow.singleton )
    {
        return MyWindow.singleton;
    }
    else{
        MyWindow.singleton = new MyWindow();
        return MyWindow.singleton;
    }            
}

我需要一个单身,因为用户会多次调用此窗口,我只需要一个。

问题是以下一些特殊的外部事件,我需要在MyWindow的一个按钮上“修改”一些监听器(删除监听器并添加新的监听器),然后再显示一次。

当我的应用程序启动时,我仍然在内存中有MyWindow.getInstance()。 但是,添加/删除侦听器似乎没有任何影响,如果他没有发生组件的实际渲染,在应用程序启动时使用以下代码的事件。

  myWindow= MyWindow.getInstance();
  myWindow.initialize();

如果我至少一次“显示”('渲染')myWindow,那么myWindow实例上的事件修改就完美无缺。

如何在未启动时显示此组件的完整初始化?

谢谢!

1 个答案:

答案 0 :(得分:2)

哪种容器装有你的按钮?如果您使用Multiple View Container,可以尝试将creationPolicy设置为allSingle View Containers一次性创造所有孩子,你不应该面对这个问题。

从Flex 3.0文档我可以检索到这个:

  

除Application容器之外的所有容器的默认创建策略是父容器的策略。 Application容器的默认策略是auto。

这看起来是造成你所有麻烦的原因。

更新:我之前没有提及过,因为我认为这是预料之中的事情:)将creationPolicy设置为all会使您的应用加载速度变慢。因此,请阅读Ordered Creation - 此技术可帮助您选择是否一次性显示控件(这是默认行为,在创建所有控件之后)或逐步显示,当它们被创建时。