понедельник, декабря 14, 2009

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.

Есть флекс-приложение, имеющее внутри себя AS3-компонент, использующий fl.controls кнопки и лейблы. При вызове какого-либо поп-апа флекс-приложение начинало неадекватно реагировать на перемещение фокуса по нажатию Tab:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/getChildIndex()
at mx.core::Container/getChildIndex()
at mx.containers::Panel/getChildIndex()
at fl.managers::FocusManager/::getChildIndex()
at fl.managers::FocusManager/::sortByDepth()
at fl.managers::FocusManager/::sortByTabIndex()
at Array$/Array::_sort()
at Array/http://adobe.com/AS3/2006/builtin::sort()
at fl.managers::FocusManager/::sortFocusableObjectsTabIndex()
at fl.managers::FocusManager/::sortFocusableObjects()
at fl.managers::FocusManager/::keyDownHandler()


Поискав в сети подобную ошибку, наткнулся на несколько постов, в которых во всем винили флешовые компоненты, что и понятно из ссылок на fl.managers::FocusManager. В итоге пришлось переделывать флеш-компонент, подписываясь на Event.ADDED_TO_STAGE его кнопок и выключая в этом событии focusManager - button.focusManager.deactivate().