【问题标题】:Adding dynamic DisplayObjects in Flex在 Flex 中添加动态显示对象
【发布时间】:2010-01-05 15:28:34
【问题描述】:

我正在使用

将 DisplayObjects 添加到 Canvas
ContentContainer.addChild(c);

ContentContainer 是我的 Canvas 对象,c 是我在运行时创建的 DisplayObject

其中一些 DisplayObjects 也有自己的子代,这些子代是在 DisplayObject 添加到 Canvas 之前在运行时添加的

然后我需要遍历 ContentContainer 的所有子级,但我第一次这样做时,它说 ContentContainer 没有子级(即 ContentContainer.numChildren = 0)。如果我再做一次,那就没问题并返回正确数量的孩子。

我需要调用什么来让 ContentContainer 重新计算它有多少个孩子吗?

【问题讨论】:

  • 你能贴出代码显示 numChildren == 0 的位置吗?它是从与 addChild() 相同的方法调用的还是在其他路径上调用的?
  • 当我为 (var i:uint=0; i
  • 你能发布你的完整代码吗?子项的添加和对子项的迭代是否在单独的函数中处理?也许他们的调用顺序错误。

标签: apache-flex flex3 adobe


【解决方案1】:

正如 Michael 所说,查看代码会有所帮助,但您可能需要查看文档中的 Event overviewAbout the creation policy 部分 - @987654321 @

具体来说,childAdd 事件可能是您在迭代之前要监听的事件:

add在组件被添加到其容器并且父子节点处于一致状态后由组件调度。此事件在容器已调度 childAdd 事件并且所有因添加而需要进行的更改已发生后调度。

=瑞恩 ryan@adobe.com

【讨论】:

  • 嗨,谢谢。不幸的是,我认为这不是问题,因为我可以看到在我单击遍历它们的按钮之前已经创建了孩子——即 DisplayObjects 本身在屏幕上可见。此外,由于在单击按钮之前不会发生迭代,因此我可以在添加 DisplayObjects 后等待任意时间长度,然后再开始迭代,但即使我在看到 DisplayObjects 后给它几分钟屏幕,我仍然遇到同样的问题
【解决方案2】:

我使用 callLater 执行了类似的任务,以便等到拖放完成后再重新计算某些任务。这可能对你有用。

public function myFunct():void{
    //do your adding
    callLater(
        function():void{
            //do your loop
        }
    )
}

【讨论】:

  • 嗨,谢谢。不幸的是,我认为时间不是问题,因为一旦添加了项目,在用户单击按钮之前不会发生通过它们的迭代。无论我在加载项目和单击按钮之间等待多长时间,我仍然遇到同样的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多