2014-12-31 5 views
0

У меня есть несколько слушателей событий, которые мне нужно удалить, если они больше не нужны. Я последовал совету нескольких других и включал в себя RemoveEventListener внутри самой функции, как:Как правильно удалить прослушиватель событий?

 object1.addEventListener(MouseEvent.MOUSE_DOWN, function StartMove(event:MouseEvent):void 
     { 
      mousePoint = new Point(MC.mouseX, MC.mouseY); 
      objectOffset = new Point(int(mousePoint.x - object1.x), int(mousePoint.y - object1.y)); 
      mousePoint.y -= objectOffset.y; 
      mousePoint.x -= objectOffset.x; 
      mousePressed = true; 
      event.currentTarget.removeEventListener(event.type, StartMove); 
     }); 

, но это просто создает слушателя, а затем удаляет его, когда его использовать один раз. Функции прослушивателя событий создаются внутри большей функции (MouseMoves()), поскольку они используют локальные переменные в MouseMoves(). (не уверен, что это подходящий способ сделать это.) Так что если я пытаюсь удалить слушателей извне, они не видят имя функции для удаления, и я не могу объявить функции вне MouseMoves() cus, они используют переменные внутри него.

чувствую, что это плохой дизайн с моей стороны, но я не уверен, где?

есть ли «правильный» более стандартный способ удаления прослушивателя событий?

спасибо.

ответ

0

Когда вы готовы удалить прослушиватель событий, вы можете использовать тот же синтаксис, который вы использовали, чтобы добавить его в первую очередь. Так что где-то в коде, когда вы будете готовы, чтобы удалить этот приемник, вы могли бы это

object1.removeEventListener(MouseEvent.MOUSE_DOWN, function StartMove(event:MouseEvent):void 

Таким образом, ваш специфичен о том, какой именно объект вы хотите удалить слушателю. Ваша функция мыши будет выглядеть следующим образом:

object1.addEventListener(MouseEvent.MOUSE_DOWN, function StartMove(event:MouseEvent):void 
     { 
      mousePoint = new Point(MC.mouseX, MC.mouseY); 
      objectOffset = new Point(int(mousePoint.x - object1.x), int(mousePoint.y - object1.y)); 
      mousePoint.y -= objectOffset.y; 
      mousePoint.x -= objectOffset.x; 
      mousePressed = true; 
     }); 
0

Да, ваше кодирование:

event.currentTarget.removeEventListener(event.type, StartMove); 

может быть использована без проблем в функции StartMove. Это просто, чтобы отменить регистрацию события в слушателе, не беспокойтесь, если он находится в функции события. И, конечно, вы также можете использовать:

object1.removeEventListener(MouseEvent.MOUSE_DOWN, StartMove); 

в функции StartMove, а если вы не хотите использовать event.currentTarget.removeEventListener.

Смежные вопросы