Основная проблема, которую я пытаюсь решить, состоит в том, что у меня есть смесь компонентов Flex & Flash, и у меня есть общая функция для добавления счетчика хода выполнения к компоненту независимо от этого. Поэтому, если компонент является Container
, я добавляю его к rawChildren
, в противном случае добавляем его как обычно.
Однако у меня возникла проблема с компонентом, который наследуется от VBox. Я звоню
cont.rawChildren.addChildAt(spinner, cont.rawChildren.numChildren);
Но когда я отслеживаю детей, мой счетчик появляется в cont.getChildren()
, и comp.numChildren
, очевидно, также увеличивается на единицу. И другие контейнеры, кажется, работают должным образом, даже другие элементы управления VBox.
Я прошелся по коду фреймворка Flex и не могу найти ничего, чтобы объяснить, почему это произойдет, либо с помощью наследования, либо по времени.
Кто-нибудь видел что-нибудь подобное или может объяснить, почему rawChildren
не может быть предсказуемым в этом случае?
Спасибо.
Функция:
var bcu:Number = u.numChildren;
var bce:Number = el.numChildren;
el.addChildAt(s, ((pos > -1)?pos : el.numChildren));
trace("ADD NEW SPINNER", u, el, el.numChildren, u.numChildren, bce, bcu);
Где el
- это либо объект DisplayObject, либо объект rawChildren контейнера, а u
- исходный объект, к которому прикрепляется счетчик.
Выход:
ADD NEW SPINNER BlockMovePopup1734 [object ContainerRawChildrenList] 6 5 5 4
А потом:
[Fault] exception, information=TypeError: Error #1034: Type Coercion
failed: cannot convert com.misc::SbSpinner@57970a1 to mx.core.IUIComponent.
Вывод показывает, что el
правильно установлено на ContainerRawChildrenList
(объект rawChildren
для VBox
) и что numChildren
равно [6,5]
против [5,4]
до вызова. Это означает, что Sprite
добавляется к дочерним элементам содержимого, а не к rawChildren.