2013-04-28 3 views
1

enter image description hereAS3: Могу ли я отправить событие от одного ребенка другому?

Привет, ребята, я не могу разобраться в этой загадке :).

Как отправить dispatchEvent из Child1 и поймать это событие в Child2?

или

Как отправить dispatchEvent из ребенка1 и поймать это событие в Child3?

или

Как отправить dispatchEvent из Child3 и поймать это событие в ребенка1?

Спасибо, ребята. Я буду признателен за помощь здесь!

ответ

1

Хотя я получаю то, чего вы пытаетесь достичь, я думаю, что лучший подход к дизайну - позволить контейнеру управлять своими детьми.

Например, если контейнер получает событие от child1, то роль контейнера в том, чтобы заботиться об уведомлении других детей, если это необходимо. Этот подход также делает очень ясным в коде контейнера базовое взаимодействие между всеми дочерними элементами контейнера. Если бы я перебирал чей-то код, я бы по достоинству оценил такую ​​методологию.

При этом у вас может быть метод в child2 и child3, который позволит вам передать child1 в качестве параметра, а затем добавить слушателя для child1 внутри. Например:

в контейнере код:

child2.setChildListener(child1); 
child3.setChildListener(child1); 

Тогда в child2 и child3, вы могли бы сделать что-то вроде этого:

public function setChildListener(childToListenTo:MovieClip):void 
{ 
    childToListenTo.addEventListener(MouseEvent.CLICK, childClickedHandler); 
} 

private function childClickedHandler(e:MouseEvent):void 
{ 
    // react to the child click here 
} 
+0

Простите, прототип Я положил это как ответ, потому что я не знал, как опубликовать это изображение как комментарий. Прошу прощения, если я нарушу правила. Я удалю это прямо сейчас. – irnik

+0

Нет проблем, но ваш ответ был совершенно новым вопросом. Вы попросили подход, затем вы попытались реализовать и столкнулись с «другой» проблемой. – prototypical

+0

да, я знаю, что это путаница в моей голове. Я работаю над этим в любую минуту в свободное от работы время, не сплю, не ем. Я хочу узнать этот чертов язык. – irnik

1

Прежде всего, вам нужно научиться объявлять пользовательские события и обрабатывать их. У вас есть простое руководство здесь от Adobe: http://cookbooks.adobe.com/post_AS3__Creating_and_dispatching_Custom_Events-17609.html

Вы также можете прочитать о том, как события пузыря и фиксируются в следующей ссылке: http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a67edfb831266c0b5fc6-8000.html

Теперь давайте пройдем случаев вы спросите:

Случай 1. От ребенка 1 к ребенку 2: По сути, если Ребенок 2 не слушает событие ребенка 1, он не сможет его захватить, поскольку у него нет родительского отношения. Что вы можете сделать, это следующее: Объявить событие в Child 1 и прослушать и захватить его из контейнера. Контейнер может вызывать метод у ребенка 2 в результате срабатывания события от ребенка 1.

Случай 2. От ребенка 1 к ребенку 3: Это в основном то же самое, что и от ребенка от 1 до ребенка 3, только это когда контейнер вызывает Child 2, Child 2 также вызывает Child 3.

Корпус 3. Ребенок от 3 до детей 1. Ребенок 3 может поднять событие, которое может всплыть до самого контейнера. Затем контейнер может вызвать желаемый метод у ребенка 1.

Надеюсь, что это помогло.

+0

Очень ценивший Хавьер.Мне нужно немного времени, чтобы понять все это. Вы поняли мою точку зрения, и я счастлив. Еще раз спасибо. – irnik

+0

Хавьер, что вы имеете в виду в случае 3, «событие, которое может пузыриться до самого контейнера». Это не работает для меня: addEventListener («FromChild3», onFromChild3); Я получил это в Child 1, и это: dispatchEvent (новое событие («FromChild3»)); в Ребенке 3 – irnik

+0

1119: Доступ, возможно, к неопределенному имуществу вора через ссылку со статическим типом Контейнер – irnik