Мне нужна помощь, чтобы вспомнить событие в AS3 - PullRequest
0 голосов
/ 22 января 2012

Я хочу, чтобы родитель моего класса сначала обрабатывал событие, затем я хочу, чтобы потомок обрабатывал событие.Есть ли способ явно всплыть событие?Я хочу сделать что-то вроде этого:

...
this.addEventListener(MouseEvent.CLICK, characterClicked);
...

private function characterClicked(e:Event):void{
// pass event to parent to be handled first
...
}

Возможно ли это, и если да, то как?

Ответы [ 3 ]

5 голосов
/ 23 января 2012

Есть три "фазы" события; Capture, At target and Bubble .Они происходят в таком порядке, что означает, что если вы установите прослушиватель событий в фазу захвата, он всегда будет срабатывать раньше, чем один набор регулярно (что будет означать либо цель, либо пузырь).

Примерно так:

// in parent, third argument is "use capture"
child.addEventListener(MouseEvent.CLICK, handleClickInParent, true); 

// in child, add listener as usual
addEventListener(MouseEvent.CLICK, handleClick);

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

0 голосов
/ 22 января 2012

Если бы вы обрабатывали слушателя в родителе, а не в потомке, это могло бы быть проще.Тогда вы можете просто передать событие ребенку, когда закончите:

// inside parent class:
childObj.addEventListener(MouseEvent.CLICK, onCharacterClicked);

private function onCharacterClicked(e:Event):void {
    // do parent stuff first
    // ...

    // then pass event to child 
    childObj.onCharacterClicked(e);
}
0 голосов
/ 22 января 2012

Я нашел способ сделать это.Это кажется взломанным, но это работает.Если есть лучший способ сделать это, пожалуйста, дайте мне знать.

...
this.addEventListener(MouseEvent.CLICK, characterClicked);
...

private function characterClicked(e:Event):void{
// pass event to parent to be handled first
this.removeEventListener(MouseEvent.CLICK, characterClicked); //prevent infinite loop
            dispatchEvent(e); // send event to parent object
            this.addEventListener(MouseEvent.CLICK, characterClicked);
            e.stopImmediatePropagation();
...
}
...