Добавление UIComponent как в холст, так и в дерево во Flex 3

В настоящее время я пытаюсь добавить настраиваемый класс, подклассы UIComponent как к дереву, так и к холсту, но когда я пытаюсь переупорядочить дерево, перетаскивая его, я получаю эту ошибку:

TypeError: Ошибка № 1010: термин не определен и не имеет свойств. в mx.controls :: Tree / get firstVisibleItem () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ controls \ Tree.as: 764] в flash.utils :: ByteArray / writeObject ( ) в flash.desktop :: Clipboard / putSerialization () в flash.desktop :: Clipboard / convertFlashFormat () в flash.desktop :: Clipboard / setData () в mx.managers :: NativeDragManagerImpl / doDrag () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ airframework \ src \ mx \ manager \ NativeDragManagerImpl.as: 282] в mx.managers :: DragManager $ / doDrag () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ manager \ DragManager.as: 243] в mx.controls.listClasses :: ListBase / dragStartHandler () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ controls \ listClasses \ ListBase.as:9085] в flash.events::EventDispatcher/dispatchEventFunction () в flash.events::EventDispatcher/dispatchEvent () в mx.core :: UIComponent / dispatchEvent () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as: 9298] в mx.controls.listClasses :: ListBase / mouseMove Обработчик () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ controls \ listClasses \ ListBase.as: 8822]

Когда я не добавляю UIComponent на холст, эта ошибка не возникает, кто-нибудь знает, почему это происходит?


person Chris M    schedule 08.04.2010    source источник
comment
Вы пытаетесь добавить один и тот же экземпляр своего класса или разные экземпляры?   -  person bug-a-lot    schedule 09.04.2010


Ответы (2)


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

person Kevin    schedule 08.04.2010
comment
Кажется, что это не так, добавление моего пользовательского UIComponent либо к холсту, либо к дереву работает, но не при одновременном добавлении к обоим. - person Chris M; 09.04.2010

Вы должны создать новый экземпляр вашего элемента управления, чтобы добавить его на холст. У UIComponent есть множество свойств, которые требуют, чтобы он находился в одном месте - например, свойство parent. Если вам нужно и то, и другое для отображения чего-то похожего, вы можете использовать третий объект для хранения вашего состояния и привязки к нему данных.

person Dan Monego    schedule 09.04.2010
comment
Прошлой ночью я пошел и провел обширный рефакторинг своего кода, чтобы сделать объект, который я добавляю в свое дерево, подклассом Object NOT UIComponent, затем добавил свойство представления к моему объекту, которое затем добавляется на холст, что, как я думал, решит проблему, но возникает та же ошибка. Понятия не имею, почему, но похоже, что ошибка как-то связана с ByteArray :: writeObject (), когда у меня есть переменная uicomponent в моем объекте. У меня действительно нет времени просматривать весь исходный код flex, чтобы отладить его, но пока я просто отключил перетаскивание, пока не смогу лучше реорганизовать свой код. - person Chris M; 10.04.2010