Flex控件初始化问题
有个对话框mx:TitleWindow->mx:TabNavigator->里有两个mx:Tile,每个Tile里都有个datagrid.测试如下:
1.对话框显示后,马上动态监测第二个tile下的datagrid竟然为空。
2.对话框显示后,鼠标分别点击两个tile,然后测试第二个tile下的datagrid不为空了。
查了帮助,发现container有个creationpolicy属性,它决定了容器内的控件初始化的方式。只要修改容器的creationpolicy=“all”,即可为所有控件初始化好。
如果没有为容器指定 creationPolicy
,则该容器将继承其父项的 creationPolicy
。如果没有为 Application 指定 creationPolicy
,则默认为 ContainerCreationPolicy.AUTO
。
ContainerCreationPolicy.AUTO
的 creationPolicy
意味着容器将延迟创建部分或全部后代,直到需要它们时为止。此进程称为延迟实例化。此策略能使启动时间达到最佳,因为最初只创建很少的 UIComponent。但是,当用户首次导航到应用程序的其它部分时,这将引入导航延迟。导航器容器(如 Accordion、TabNavigator 和 ViewStack)通过立即创建其所有子项实现 ContainerCreationPolicy.AUTO
策略,但要等到子项成为导航器容器的所选子项时才创建该子项的更深层的后代。
ContainerCreationPolicy.ALL
的 creationPolicy
意味着导航器容器会立即创建每个子项的更深层的后代,而不必等待选择该子项。对于单一视图容器(如 VBox 容器),ContainerCreationPolicy.AUTO
和 ContainerCreationPolicy.ALL
策略没有区别。
ContainerCreationPolicy.QUEUED
的 creationPolicy
意味着要将容器添加到创建队列,而不是立即进行实例化和绘制。应用程序处理列队容器时,将创建容器的子项,并等待创建子项后才前进到创建队列中的下一个容器。
ContainerCreationPolicy.NONE
的 creationPolicy
意味着容器不创建其子项。在这种情况下,由 MXML 作者负责通过调用 createComponentsFromDescriptors()
方法来创建子项。