PDA

Просмотр полной версии : Как обратиться к предку


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/>

GBee
06.09.2011, 18:52
Не подходит?group_1.visible = false;

ekonomizer
06.09.2011, 18:55
К сожалению нет.
в свойстве event в обработчик передаются разные объекты. И нужно как то через него перейти к предку.

GBee
06.09.2011, 18:56
event.currentTarget.parent.visible = false;Тоже?

ekonomizer
06.09.2011, 19:16
Очень подходит! Большое спасибо, я обращался event.target.parent.visible а не currentTarget из за этого видимо и не работало.
А не подскажите что можно почитать на тему работы с dom методи addChild parent итп.

alatar
06.09.2011, 19:26
Вам бы сначала про ООП что-нибудь почитать.

Добавлено через 40 секунд
Что-бы не возникало желания дергать предков.

ekonomizer
06.09.2011, 19:34
Вам бы сначала про ООП что-нибудь почитать.

Добавлено через 40 секунд
Что-бы не возникало желания дергать предков.

Спасибо за совет читывал)
На Flex работаю вторую неделю, поэтому не вижу ничего плохого в том что бы дергать предков.
Тут можно как то проще поступить? Буду рад другому решению.

alatar
06.09.2011, 19:40
Спасибо за совет читывал)
Перечитайте.
не вижу ничего плохого в том что бы дергать предков.
Помимо прочего, предком может оказаться не то, что вы ожидаете. Можно использовать owner, но это тоже не лучшее решение.
Тут можно как то проще поступить? Буду рад другому решению.
Где тут? Решению чего? Кроме попытки обращения к предку, вы никакой задачи не описывали.

Astraport
06.09.2011, 19:41
Вам бы сначала про ООП что-нибудь почитать.
Кстати, вот здесь (http://flashgameblogs.ru/blog/actionscript/371.html) очень доступно и наглядно.

ekonomizer
06.09.2011, 19:46
задача: есть много разных компонентов они все находятся в разных группах, на них на всех висит один обработчик по клику. Как в обработчике организовать visible=false для той группы в которой находится компонент из которого вызывается обработчик?

alatar
06.09.2011, 19:51
Подписаться на клик у группы или послать событие (возможно всплывающее) из компонента.

ekonomizer
06.09.2011, 22:39
Подписываться на клик у группы нет смысла. Так как нужен именно клик по компоненту. А событие от компонента я посылаю это MouseEvent. По клику на компонент мы и идем в этот обработчик. Я не вижу смысла в каждом компоненте с событием посылать ссылку на объект конкретной группы мне кажется легче узнавать предка. Или вы что то другое имели ввиду?

GBee
06.09.2011, 23:04
Подписываться на клик у группы нет смысла
Есть :о)

ekonomizer
06.09.2011, 23:12
В группе по мимо нужного компонента куча других статичных, клик по которым совсем не должен делать группу невидимой.

Котяра
06.09.2011, 23:17
Диспачте своё событие - типа 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/>

Котяра
07.09.2011, 00:34
нет не так совсем.
В разметке можно и побыдлокодить чуток)
хотя я бы так всё равно не делал)


<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
К сожалению данный вариант не подходит, на самом деле там у меня более сложная логика так что приходится переходить по клику в обработчик. И из него уже нужно управлять группой.