【问题标题】:When do controls in Flex become addressable?Flex 中的控件何时可寻址?
【发布时间】:2009-03-22 19:16:24
【问题描述】:

关于更改不同视图堆栈面板上的控件,我在使用 Flex 时遇到了一些问题。在运行时,某些控件不可访问并返回为空。这是一个示例结构:

viewstack1
   canvasPeople
      datagridPeople
   canvasDetails
      tabNavigator1
         canvasPersonDetail
             txtLastname
         canvasPersonOptions
             comboboxOccupation

我在 datagrid1 中设置了一个“单击”处理程序来激活 canvasB (viewstack1.selectedChild = canvasB) 和详细信息选项框 (tabNavigator1.selectedChild = canvasPersonOptions)。前者工作正常,但后者返回有关访问空对象的错误,因为在用户单击 People 数据网格中的项目时,tabNavigator1 为空,它下面的任何控件也是空的。 (虽然它的父级(canvasDetails)是可寻址的。)目前这是一个很小的应用程序,所以它不像是在等待加载项目。有没有办法控制 Flex 如何呈现控件,以便在用户看到它们之前就可以访问它们?我不知道这是否特定于 viewStack 控件。

【问题讨论】:

    标签: apache-flex


    【解决方案1】:

    是的,这称为“创建策略”,它是所有 Container 类的属性。要做我们正在寻找的事情,您可以使用“全部”的创建策略; “自动”是默认值。

    ContainerCreationPolicy.AUTO 的 creationPolicy 意味着容器延迟创建部分或全部后代,直到需要它们,这个过程称为延迟实例化。此策略产生最佳启动时间,因为最初创建的 UIComponents 较少。但是,当用户第一次导航到应用程序的其他部分时,这会引入导航延迟。导航器容器(如 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 下的初始化时间会很大。

    【讨论】:

      【解决方案2】:

      子组件的创建由 creationPolicy 属性控制。 Flex 3 文档页面"About the creationPolicy property" 中有详细描述。

      如果您将该属性设置为“all”,则 ViewStack 容器的每个子组件将在 ViewStack 创建后立即创建。 TabNavigator 也是如此。当然,这可能会对性能产生一些影响,文档中也对此进行了描述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        • 2019-11-05
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多