我有一个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实例上的事件修改就完美无缺。
如何在未启动时显示此组件的完整初始化?
谢谢!
答案 0 :(得分:2)
哪种容器装有你的按钮?如果您使用Multiple View Container,可以尝试将creationPolicy
设置为all
。 Single View Containers一次性创造所有孩子,你不应该面对这个问题。
从Flex 3.0文档我可以检索到这个:
除Application容器之外的所有容器的默认创建策略是父容器的策略。 Application容器的默认策略是auto。
这看起来是造成你所有麻烦的原因。
更新:我之前没有提及过,因为我认为这是预料之中的事情:)将creationPolicy
设置为all
会使您的应用加载速度变慢。因此,请阅读Ordered Creation - 此技术可帮助您选择是否一次性显示控件(这是默认行为,在创建所有控件之后)或逐步显示,当它们被创建时。