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