我在改变不同视图面板上的控件方面遇到了一些麻烦。在运行时,某些控件无法访问并返回null。这是一个示例结构:
viewstack1
canvasPeople
datagridPeople
canvasDetails
tabNavigator1
canvasPersonDetail
txtLastname
canvasPersonOptions
comboboxOccupation
我在datagrid1中设置了一个“click”处理程序,用于激活canvasB(viewstack1.selectedChild = canvasB)和详细选项框(tabNavigator1.selectedChild = canvasPersonOptions)。前者工作正常,但后者返回有关访问空对象的错误,因为当用户单击People数据网格中的项目时,tabNavigator1为空,就像它下面的任何控件一样。 (它的父级,但是(canvasDetails),是可寻址的。)目前这是一个很小的应用程序,所以它不像是在等待加载项目。有没有办法控制Flex如何呈现控件,以便在用户看到它们之前可以访问它们?我不知道这是否特定于viewStack控件。
答案 0 :(得分:2)
是的,这被称为“创建策略”,它是所有Container类的属性。要做你正在寻找的事情,你可以使用“全部”的创作政策; “auto”是默认值。
ContainerCreationPolicy.AUTO的creationPolicy意味着容器会延迟创建一些或所有后代,直到需要它们为止,这个过程称为延迟实例化。此策略产生最佳启动时间,因为最初创建的UIComponent较少。但是,当用户第一次导航到应用程序的其他部分时,这会引入导航延迟。诸如Accordion,TabNavigator和ViewStack之类的导航器容器通过立即创建所有子项来实现ContainerCreationPolicy.AUTO策略,但等待创建子项的更深层后代,直到它成为导航器容器的选定子项。
ContainerCreationPolicy.ALL的creationPolicy意味着导航器容器会立即为每个子项创建更深层次的后代,而不是等到该子项被选中。对于单视图容器(如VBox容器),ContainerCreationPolicy.AUTO和ContainerCreationPolicy.ALL策略之间没有区别。
更多信息:
http://livedocs.adobe.com/flex/3/html/layoutperformance_04.html
请注意这一点:由于某种原因,Flex选择了AUTO作为默认设置。如果您的应用程序变大,creationPolicy = all下的初始化时间将会很长。
答案 1 :(得分:1)
子组件的创建由creationPolicy属性控制。 Flex 3文档页面"About the creationPolicy property"中详细介绍了它。
如果将属性设置为“all”,则只要创建ViewStack,就会创建ViewStack容器的每个子组件。同样适用于TabNavigator。当然,这可能会产生一些性能影响,这些影响也在文档中进行了描述。