【问题标题】:Access component id of one mxml from another从另一个 mxml 访问一个 mxml 的组件 id
【发布时间】:2009-09-21 13:54:23
【问题描述】:

我有两个 mxml 文件。一个是主要的,即应用程序标记 mxml 文件,另一个是我的 mxml 组件文件。 我的主 mxml 中有一个视图堆栈,其 ID 为“mainViewStack”。 现在我想从我的 mxml 组件文件中设置“mainViewStack”的 selectedChild 属性。 但我收到错误: 错误 #1009:无法访问空对象引用的属性或方法。 在访问 mainObj.mainViewStack.selectedChild.id 时 mainObj 是主 mxml 文件的对象。 请帮帮我。 谢谢你。

【问题讨论】:

  • 发布一些代码可能会有所帮助。追踪 mainObj 看看你得到了什么。
  • 另外,您是否为 viewstack 的所有子项提供了组件 ID?

标签: apache-flex


【解决方案1】:

我的猜测是您正试图在创建孩子之前访问它。但如果没有代码,这很难说。

尝试等到应用程序上的 FlexEvent.CREATION_COMPLETE 事件才能访问选定的子项。

【讨论】:

    【解决方案2】:

    此问题称为“延迟实例化”,是 Flex 组件生命周期的产物。如果您想对这个概念进行非常彻底的解释,this white paper 可能是我读过的最好的。

    本质上,Flex 会根据需要创建组件。每个组件都有一个生命周期,贯穿各个阶段:

    • 建设
    • 加法
    • 初始化
    • 失效
    • 验证
    • 更新
    • 移除

    子组件在通过初始化阶段之前是不可访问的。这是 Flex 组件将调度其 CREATION_COMPLETE 事件的点,让您(和框架)知道它已准备好进行交互。在此事件之前,您将在尝试访问组件或其子组件时收到 null 引用错误。

    ViewStacks 默认情况下不会初始化子组件,直到它们被调用显示。 ViewStack 的 creationPolicy 属性默认设置为 auto。此属性有多个选项,包括 all。但是请注意,这可能会带来严重的性能问题,因为堆栈中的所有组件都将立即初始化,而不管用户是否实际查看该组件。

    在您的具体情况下,这不是问题。包含视图堆栈的组件尚未完全初始化。您需要在 CREATION_COMPLETE 事件处理程序中设置 ViewStack 的子级。

    【讨论】:

      【解决方案3】:

      或者您可以给出“creationPolicy=all”,因为 Flex 只从视图堆栈中创建第一个可见子项

      【讨论】:

        【解决方案4】:

        您可以在您的 MXML 组件中使用此代码从其他 MXML 组件更改应用程序的 ViewStack 选择的子组件。但是,这不是一个好习惯。

        FlexGlobals.topLevelApplication.mainViewStack.selectedChild = FlexGlobals.topLevelApplication.childId

        您可以使用静态事件分派器从一个视图分派事件并在另一个视图中侦听该事件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-08
          • 2010-12-05
          • 2011-09-18
          • 1970-01-01
          • 2014-01-11
          • 1970-01-01
          相关资源
          最近更新 更多