Я как бы прыгаю вперёд к некоторым вещам Flex / AIR. У меня довольно солидный опыт работы с AS3, но, учитывая внутреннюю сложность иерархии Flex (по сравнению с обычной Flash), я столкнулся с проблемой.
Давайте предположим, что у вас есть приложение, в котором почти все основано на событиях (часто). Доступ к элементам в непосредственной близости от цели события или самой цели события тривиален. Однако я пытаюсь найти наиболее практичный (читай: лучший, самый эффективный) способ найти детей, которые далеки от текущего контекста.
Я знаю, что есть такие функции, как getChildAt()
и getChildByName()
, но это предполагает родительский контекст; Что делать, если элемент (Flex), который вы ищете, состоит из нескольких родителей, одного брата, а затем нескольких детей? Мы принимаем как должное такие вещи, как jQuery, которые делают это легко, но, очевидно, у нас нет такой роскоши в AS3.
Действует ли что-либо из следующего? Есть ли лучший способ?
Перебирайте родителей и родителей, пока не найдете точку остановки, не найдите брата и сестер, и не перебирайте детей и их детей, пока не найдете свою цель;
Хранить ключевые объекты в глобальном хранилище объектов (sic) и ссылаться на них при необходимости (yech)
Используйте специальные точечные обозначения для достижения цели, включая элементы (такие как скины и их контейнеры - снова yech)
Любые мысли приветствуются.
Edit:
Для пояснения, давайте возьмем пустое приложение Flex 4 AIR. Очевидно, у нас есть WindowedApplication
в качестве корня, и давайте добавим двух SkinnableContainer
детей с идентификаторами navContainer
и mainContainer
соответственно. Оба имеют собственные скины. В пределах mainContainer
у нас есть еще один SkinnableContainer
с вертикальным расположением и идентификатором mainContent
, и как один из его дочерних элементов он имеет объект (любой подойдет - искра BorderContainer
, может быть) с идентификатором animatedBox
, например. В пределах navContainer
у нас есть искра Button
, у которой слушатель привязан к MouseEvent.CLICK
. В рамках этой функции мы хотим получить доступ к animatedBox
(nativeWindow.mainContainer.mainContent.animatedBox
) и анимировать его, чтобы изменить, скажем, его ширину.
Цель состоит в том, чтобы получить доступ к этому отдаленному DisplayObject
(animatedBox
) таким образом, чтобы он был как можно более ненавязчивым и эффективным, и в то же время соответствовал стандартам Flex, которыми я явно еще не обладал. :)