Просмотр полной версии : Как обратиться к предку
ekonomizer
06.09.2011, 18:34
Здравствуйте подскажите пожалуйста как обратиться к пердку(Group) внутри обработчика событий по клику на контейнере, что бы поменять свойство предка?
Пробовал через parent эффекта нет то ли синтаксис не тот, то ли вообще не то:)
Передавать ссылку на объект предка в обработчик не хочется.
И еще подскажите пожалуйста что можно почитать про иерархию во flex и главное методы работы с dom во flex.
<fx:Script>
<![CDATA[
public function click_handler(event:MouseEvent)
{
... .visible = false;
}
]]>
</fx:Script>
<s:Group id="group_1" visible="true">
<s:BorderContainer click="click_handler(event)">
<s:BorderContainer/>
<s:Group/>
Не подходит?group_1.visible = false;
ekonomizer
06.09.2011, 18:55
К сожалению нет.
в свойстве event в обработчик передаются разные объекты. И нужно как то через него перейти к предку.
event.currentTarget.parent.visible = false;Тоже?
ekonomizer
06.09.2011, 19:16
Очень подходит! Большое спасибо, я обращался event.target.parent.visible а не currentTarget из за этого видимо и не работало.
А не подскажите что можно почитать на тему работы с dom методи addChild parent итп.
Вам бы сначала про ООП что-нибудь почитать.
Добавлено через 40 секунд
Что-бы не возникало желания дергать предков.
ekonomizer
06.09.2011, 19:34
Вам бы сначала про ООП что-нибудь почитать.
Добавлено через 40 секунд
Что-бы не возникало желания дергать предков.
Спасибо за совет читывал)
На Flex работаю вторую неделю, поэтому не вижу ничего плохого в том что бы дергать предков.
Тут можно как то проще поступить? Буду рад другому решению.
Спасибо за совет читывал)
Перечитайте.
не вижу ничего плохого в том что бы дергать предков.
Помимо прочего, предком может оказаться не то, что вы ожидаете. Можно использовать owner, но это тоже не лучшее решение.
Тут можно как то проще поступить? Буду рад другому решению.
Где тут? Решению чего? Кроме попытки обращения к предку, вы никакой задачи не описывали.
Astraport
06.09.2011, 19:41
Вам бы сначала про ООП что-нибудь почитать.
Кстати, вот здесь (http://flashgameblogs.ru/blog/actionscript/371.html) очень доступно и наглядно.
ekonomizer
06.09.2011, 19:46
задача: есть много разных компонентов они все находятся в разных группах, на них на всех висит один обработчик по клику. Как в обработчике организовать visible=false для той группы в которой находится компонент из которого вызывается обработчик?
Подписаться на клик у группы или послать событие (возможно всплывающее) из компонента.
ekonomizer
06.09.2011, 22:39
Подписываться на клик у группы нет смысла. Так как нужен именно клик по компоненту. А событие от компонента я посылаю это MouseEvent. По клику на компонент мы и идем в этот обработчик. Я не вижу смысла в каждом компоненте с событием посылать ссылку на объект конкретной группы мне кажется легче узнавать предка. Или вы что то другое имели ввиду?
Подписываться на клик у группы нет смысла
Есть :о)
ekonomizer
06.09.2011, 23:12
В группе по мимо нужного компонента куча других статичных, клик по которым совсем не должен делать группу невидимой.
Диспачте своё событие - типа hidePressed. а уже сама группа или управляющий группой будет решать - спрятать группу или посмотреть на ваше поведение и потом только спрятать)
ekonomizer
06.09.2011, 23:33
как то так?
<fx:Script>
<![CDATA[
public function click_handler(event:MouseEvent)
{
var eventObject:Event = new Event("hidePressed");
dispatchEvent(eventObject);
}
]]>
</fx:Script>
<s:Group id="group_1" visible="true" hidePressed="group_1.visible='false'">
<s:Label text="label1"/>
<s:BorderContainer click="click_handler(event)">
<s:BorderContainer/>
<s:Group/>
<s:Group id="group_2" visible="true" hidePressed="group_2.visible='false'">
<s:Label text="label2"/>
<s:BorderContainer click="click_handler(event)">
<s:BorderContainer/>
<s:Group/>
<s:Group id="group_3" visible="true" hidePressed="group_3.visible='false'">
<s:Label text="label3"/>
<s:BorderContainer click="click_handler(event)">
<s:BorderContainer/>
<s:Group/>
нет не так совсем.
В разметке можно и побыдлокодить чуток)
хотя я бы так всё равно не делал)
<s:Group id="group_1" visible="true" >
<s:Label text="label1"/>
<s:BorderContainer click="group_1.visible = false;">
<s:BorderContainer/>
<s:Group/>
ekonomizer
07.09.2011, 11:38
К сожалению данный вариант не подходит, на самом деле там у меня более сложная логика так что приходится переходить по клику в обработчик. И из него уже нужно управлять группой.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.