AS3: удаление EventListeners без знания количества или имен - PullRequest
2 голосов
/ 28 апреля 2010

Сначала коротко о том, как работает мой сайт: При нажатии на ссылку проверяется, отображается ли что-либо уже в левой или правой части экрана (веб-сайт выглядит как книга, поэтому у меня есть левая страница, на которой я хочу отобразить информацию, и правая страница). Если уже есть что-то, показывающее, что оно скрывает это и отображает новый объект, вместе с этим он включает все кнопки в этом объекте (у меня есть отдельные функции для настройки каждого объекта).

Примером такого EventListener будет:

pathTo.Button1.addEventListener(MouseEvent.CLICK, function():void {showText(side, object)});

То, что я пытаюсь сделать, - это удалить все предыдущие наборы EventListeners без необходимости создавать отдельные функции для удаления ссылок также внутри каждого объекта.

Укороченная версия: Как удалить все EventListener на всех объектах внутри другого объекта? Единственная переменная, которую я хочу сохранить - это объект, содержащий все. Однако внутри объектов не всегда есть EventListener.

Ответы [ 3 ]

3 голосов
/ 28 апреля 2010

вы можете проверить существующие прослушиватели событий, используя

hasEventListener(Event.TYPE)

и вы можете удалить прослушиватели событий, используя

removeEventListener(Event.TYPE, listenerFunc)

Обратите внимание, что вы ДОЛЖНЫ иметь ссылку на listenerFunc для удаления прослушивателя событий.

1 голос
/ 28 апреля 2010

Да, это возможно, и решение здесь: http://blog.andregil.net/2010/01/how-to-remove-event-listeners-with-parameters-closure/

Вы можете использовать этот фрагмент в функции слушателя, чтобы заставить его удалить слушателя из себя:

event.currentTarget.removeEventListener(event.type, arguments.callee);

;)

1 голос
/ 28 апреля 2010

Вы могли бы сделать некоторые изыскивающие исправления на платформе Flex, чтобы включить эту функциональность.

Даг Маккьюн описывает, как это сделать в этой записи блога .

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

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