是否有规范的方法从包含树中的父级获取数据?

时间:2011-01-19 22:31:23

标签: flex actionscript

我在包含层次结构中有一个actionscript实例化的组件;它扩展了ComboBox,但它是动态实例化的 - 你永远不知道什么时候你需要它。

在其包含层次结构的某个地方,有一个扩展NavigatorContent的东西,它在逻辑上是放置所述组合框的有效值的正确位置。

该子组件获取对该组有效值的引用的规范方法是什么?

2 个答案:

答案 0 :(得分:1)

我会通过让孩子在创建时发送一个带有自我引用的冒泡事件(CHILD_CREATED)来解决这个问题。然后,只需在有权访问该组有效值的对象中侦听CHILD_CREATED事件。

#1 创建父级 - 添加一个侦听器以了解子级何时创建并需要引用值

#2 已创建子项 - 以自引用作为属性调度CHILD_CREATED动态事件

#3 父母听到CHILD_CREATED - 提取对子组件的引用,并将其数据提供者设置为有效值集。

修改

如果您正在处理基于DataGroup的组件,那么处理此类问题的更简洁的方法是使用rendererAdd(在事件中对渲染器有一定的参考)。 这绝对是处理它的规范方式

因此,如果您使用DataGroup显示需要直接访问的组件,请使用rendererAdd事件。如果这不适用于您的问题,我会使用CHILD_CREATED方法。

答案 1 :(得分:1)

我认为没有一种规范方法可以解决这个问题。有很多可能的解决方案。你可以:

  • 将值作为参数传递给子构造函数
  • 传递对NavigatorContent的引用,然后直接在实例化时获取值
  • 传递对NavigatorContent的引用,然后向其添加一个更改侦听器,每次设置新值时都会触发该侦听器
  • 使用工厂或工厂方法,该方法引用NavigatorContent来创建和填充子项
  • 创建Proxy或Delegate类以管理NavigatorContent
  • 的所有子项的创建和数据填充
  • ...

我确信还有更多。

这完全取决于您的程序正在做什么,层次结构的其余部分如何协同工作,何时以及是否更新这些值,以及需要满足的其他任何要求。
从那里开始,然后看看人们在这里提出的建议,并选择一个最适合你的场景的建议。