Как addChild может выбрать неправильный индекс вставки? - PullRequest
1 голос
/ 29 сентября 2008

Итак, в приложении Flex я добавляю новый компонент с графическим интерфейсом, создавая его и вызывая parent.addChild(). Однако в некоторых случаях это вызывает ошибку в недрах Flex. Оказывается, addChild на самом деле делает:

return addChildAt(child, numChildren);

В тех случаях, когда он ломается, каким-то образом numChildren отключается на единицу. Приводит к этой ошибке:

RangeError: Ошибка № 2006: предоставлен Индекс выходит за пределы. в flash.display :: DisplayObjectContainer / addChildAt () в mx.core :: Контейнер / addChildAt () в mx.core :: Контейнер / AddChild () , , в flash.events::EventDispatcher/dispatchEventFunction () в flash.events::EventDispatcher/dispatchEvent () в mx.core :: UIComponent / dispatchEvent () в mx.controls :: SWFLoader :: contentLoaderInfo_completeEventHandler ()

Это ошибка во Flex или в том, как я ее использую? Похоже, что это может быть ошибка с многопоточностью, но поскольку Flex не поддерживает потоки, это немного сбивает с толку.

Ответы [ 5 ]

1 голос
/ 24 октября 2008

numChildren недопустимо ссылается на существующий индекс в дочернем массиве. Массивы в AS3 индексируются, начиная с 0. Это означает, что последний элемент в вашем массиве для индекса numChildren - 1, а не numChildren.

попробуйте addChildAt (child, numChildren - 1);

1 голос
/ 29 сентября 2008

Возможно ли, что вы добавляете дочерний элемент до полной инициализации компонента? Может быть, попробуйте добавить ребенка после трансляции Event.COMPLETE?

Может не поддерживать потоки, но все равно асинхронно ...

0 голосов
/ 29 декабря 2011

ср. http://forums.devshed.com/flash-help-38/scroll-pane-scroll-bars-not-working-818174.html - вам нужно добавить дочерние элементы к экранному объекту, а затем установить источник полосы прокрутки в качестве экранного объекта. Вроде как это ...

Код:

var myDisplay : DisplayObject = new DisplayObject();

myDisplay.addChild(myChild1);
myDisplay.addChild(myChild2);
myDisplay.addChild(myChild3);
myDisplay.addChild(myChild4);

ScrollPane.source = myDisplay;
ScrollPane.update();
0 голосов
/ 23 октября 2008

ОК, как допинг, я пытался добавить дочерний элемент в контейнер, хотя он уже был там, отсюда и запутанное сообщение "неправильный индекс вставки".

0 голосов
/ 29 сентября 2008

Я заметил, что это чаще всего происходит при переопределении UIComponent, который уже находится в списке отображения. Вы повторно воспитываете в этой ситуации?

...