Flex 3: добавление спрайта в контейнер «rawChildren» иногда добавляет его в дочерние элементы содержимого - PullRequest
0 голосов
/ 18 января 2012

Основная проблема, которую я пытаюсь решить, состоит в том, что у меня есть смесь компонентов 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.

1 Ответ

2 голосов
/ 19 января 2012

Это было весело.Нашел причуду.Я думаю, что, возможно, функция rawChildren.addChildAt немного глючит.Нашел этот блок текста в классе Container:

    Container assumes that content children are contiguous, and that
    non-content children come before or after the content children.
    In order words, Container partitions DisplayObjectContainer's
    index range into three parts:

    A B C D E F G H I
    0 1 2 3 4 5 6 7 8    <- index for all children
          0 1 2 3        <- index for content children

    The content partition contains the content children D E F G.
    The pre-content partition contains the non-content children
    A B C that always stay before the content children.
    The post-content partition contains the non-content children
    H I that always stay after the content children.

Если я использовал rawChildren.addChild, то сейчас он работает нормально.В обоих случаях спиннер добавлялся как последний дочерний элемент, но addChild делает это правильно.

...