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