2009-02-26 34 views
0

我有一个TitleWindow中MXML类至极具有若干组件,和听众。 在它的creationComplete和init状态中,我添加了一些监听器来侦听其gui上的事件。Flex和假MXML初始化,而无需实际表示组分,(更insise)

当上一个“按钮”,用户点击,我做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实例上的事件修改完美地工作,不会令人惊讶。

我该如何伪造完整该组件的初始化没有在启动时显示它?

谢谢!

回答

2

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

默认创建的政策,除了应用程序容器,是父容器的政策:

从Flex的3.0的文档,我可以检索此。应用程序容器的默认策略是auto。

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

更新:我没有提到这一点早,因为我认为这是可以预料的:)设置creationPolicyall使您的应用程序加载速度越慢。因此,请阅读Ordered Creation - 这种技术可以帮助您选择是否一次显示控件(这是默认行为,在所有控件创建完成后)或分步显示被创建。

+0

你说得对,现在的问题是,初始化这是启动特定的窗口需要2秒钟,并挂起系统,我想知道是否有事件知道什么时候完成渲染 – coulix 2009-02-26 19:24:36