Есть ли в ActionScript 3 какая-то система делегирования событий? - PullRequest
1 голос
/ 10 января 2012

У меня есть контейнер со многими изображениями.Вместо добавления прослушивателя для щелчка и других событий мыши на каждом из изображений, я хотел бы прослушивать только те события на родительском изображении.

Возможно ли это?

Ответы [ 2 ]

7 голосов
/ 10 января 2012
container.addEventListener(MouseEvent.CLICK, clickHandler);
private function clickHandler(e:MouseEvent):void {
  trace(e.currentTarget); // references container
  trace(e.target); //references container's child or container itself depending on what has been clicked 
}
1 голос
/ 10 января 2012

Если я правильно понимаю ваш вопрос, это вполне возможно. Итак, если у вас есть что-то вроде:

parent.addChild(new Child());
parent.addChild(new Child());
parent.addChild(new Child());
parent.addChild(new Child());

Тогда вы сможете привязать прослушиватель событий к родителю таким образом:

parent.addEventListener(MouseEvent.CLICK, handleClick);

и ваш обработчик должен выглядеть примерно так:

private function handleClick(e:MouseEvent) {
    // cast the target of the event as the correct class
    var clickedChild:Child = Child(e.target); 

    // Do whatever you want to do.
}

Вы также можете комбинировать это с аргументом useCapture метода addEventListener, чтобы прикрепить событие на стороне захвата события, а не на пузырьковой стороне. А также используйте метод .stopPropagation() в событии, чтобы остановить запуск других обработчиков событий ...

Но трудно сказать, нужно ли вам их использовать, не зная больше о том, что вы пытаетесь сделать. Но, надеюсь, это даст вам толчок в правильном направлении.

...