добавление EventListener во время запуска такого события без его запуска - PullRequest
0 голосов
/ 10 октября 2011

Когда ключ escape освобождается, я закрываю самый глубокий дочерний элемент в древовидной структуре, а затем говорю его родителю (который теперь является новым «самым глубоким дочерним элементом») закрываться при отпускании ключа escape ...Я делаю это во время запуска такого события, которое приводит к закрытию всей цепочки.

Какие-либо советы о том, как решить эту проблему?

Ответы [ 3 ]

1 голос
/ 10 октября 2011

Попробуйте добавить event.stopImmediatePropagation() в конце слушателя.

0 голосов
/ 10 октября 2011

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

Конечно, вы можете добавить метод stopImmediatePropagation (), как упомянуто в других ответах, чтобы убедиться, что событие не всплывает на другие объекты. Я не уверен, что пузыри событий повлияют на оставшихся потомков в этом примере, но если это произойдет, это определенно ответит на проблему, и вы можете вызвать этот метод в функции eventHandler где угодно, прежде чем вызывать initEvent (). 1003 *

private function initEvent(child:Sprite):void
{
    child.addEventListener( KeyboardEvent.KEY_UP , eventHandler );
}

private function eventHandler(event:KeyboardEvent):void
{
   if( event.charCode == //whatever the charCode is for the escape key )
   {
       var deepestChild:Sprite = event.currentTarget;
       deepestChild.removeEventListener( KeyboardEvent.KEY_UP , eventHandler );

       var parent:Sprite = deepestChild.parent;
       parent.removeChild(deepestChild );

       if( parent != null )
           initEvent( parent )

   }
}

0 голосов
/ 10 октября 2011

Посмотрите, делает ли вызов stopPropagation() в вашем экземпляре Event свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...