addChild如何选择错误的插入索引?

时间:2020-03-06 14:52:05  来源:igfitidea点击:

因此,在Flex应用程序中,我通过创建新的GUI组件并调用parent.addChild()来添加它。但是,在某些情况下,这会导致Flex肠胃出现错误。事实证明,addChild实际上是这样做的:

return addChildAt(child, numChildren);

在中断的情况下,numChildren会以某种方式关闭。导致此错误:

RangeError: Error #2006: The supplied
  index is out of bounds.   at
  flash.display::DisplayObjectContainer/addChildAt()
    at
  mx.core::Container/addChildAt()
    at
  mx.core::Container/addChild()
    .   .   at
  flash.events::EventDispatcher/dispatchEventFunction()
    at
  flash.events::EventDispatcher/dispatchEvent()
    at
  mx.core::UIComponent/dispatchEvent()
    at
  mx.controls::SWFLoader::contentLoaderInfo_completeEventHandler()

这是Flex中的错误还是我的使用方式?看起来可能是一个线程错误,但是由于Flex不支持线程,这有点令人困惑。

解决方案

我注意到,最常见的情况是在重新父代已在显示列表中的UIComponent时发生。在这种情况下,我们是否正在重新育儿?

我们是否有可能在完全初始化组件之前添加一个子级?也许在广播Event.COMPLETE之后尝试添加一个孩子?

它可能不支持线程,但仍然是异步的...

好的,就像一个涂料一样,我试图将一个孩子添加到一个容器中,即使它已经存在了,因此也出现了令人困惑的"错误的插入索引"消息。

numChildren没有有效地引用children数组中的现有索引。 AS3中的数组从0开始索引。这意味着数组中与numChildren 1(而不是numChildren)相同的最后一项。

尝试addChildAt(child,numChildren 1);