【问题标题】:Flex Component Lifecycle with Menus - best practice带有菜单的 Flex 组件生命周期 - 最佳实践
【发布时间】:2010-11-05 23:37:07
【问题描述】:

我在 Flex 中构建了一个具有不同用户角色的多用途应用程序。我使用带有菜单栏的视图堆栈在不同页面之间导航。

但是 - 每次打开页面时,我都需要在 init() 函数中进行一些数据库调用、应用用户角色设置等。此初始化函数可能会引用此页面的某些 UI 元素。

我尝试使用“creationComplete”事件加载它,但这个事件只触发一次(因为页面没有重新构建,视图堆栈显示它)。

现在我已将它放在“显示”事件上,但这似乎没有被一致地触发,或者在第一次完全创建页面之前。

这种情况的最佳做法是什么? * 我必须传入数据 * 调用初始化函数(数据库调用) * 操作组件

理想情况下,我需要一种方法来在每次加载页面时以及在创建所有组件之后调用 init。

感谢您的帮助, 马丁

【问题讨论】:

    标签: apache-flex actionscript-3


    【解决方案1】:

    只是一个想法,但为什么不尝试对 ViewStack 更改效果进行远程调用。您可以为此使用视图实现的接口。

    【讨论】:

    • 是的,这就是我想要做的,但是第一次,当以前从未访问过 View 时,我无法引用 View 的子项。它们还不存在。一旦触发 ITEM.CLICK 事件,只有 TabBar 具有初始化 Container 的子项的属性。但是,如果您使用带有 Tabbar 的 Viewstack,则不支持此事件。我现在最终解除了延迟实例化,将它的 creationPolicy 设置为“All”,并在每次视图堆栈更改时进行调用。
    • 好的。我记得也遇到过这类问题。我不再拥有源代码,但据我所知,我同时使用了 creationComplete 和显示效果。第一次创建视图时,会执行 creationComplete 处理程序,调用 init 函数并将 creationDone 变量设置为 true。在show effect handler中,检查creationDone是否为真,如果是,调用init
    【解决方案2】:

    试试updateComplete 事件。

    当对象调用其 commitProperties()、measure() 和 updateDisplayList() 方法时调度(如果需要)。

    这是在组件显示之前更改组件的最后机会。所有属性都已提交,组件已测量和布局。

    【讨论】:

    • 这个事件经常被触发,甚至在页面加载之前也是如此。
    【解决方案3】:

    当我用包装类包装s:Group 以放入TabNavigator 时,我遇到了同样的问题。结果,未调用显示事件。最后我把我所有的s:Group都改成了mx:Canvas,直接放到TabNavigator中(ViewStack也是一样的)。之后creationComplete 事件被调用一次,随后的页面访问调用showmx:Canvas

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多