2016-11-25 2 views
0

В документации упоминается, что я могу использовать функцию удаления компонентов для удаления добавленных событий событий. Нужно ли мне все это время? Или удаляются события, когда объект удален?Когда мне нужно вызвать removeEventListener в моих компонентах?

Я понимаю, что мне нужно удалить события, которые я добавил на другие объекты. Но если компонент добавляет событие click к своей сущности. Удалено ли это событие щелчка при удалении объекта? Или это может вызвать утечку памяти?

Приветствия

Peter

+0

Вы должны быть в состоянии проверить это. Вызывает некоторый выход журнала с обработчиком события, удаляет объект и запускает событие. – lupz

+0

Согласен, но я не мог придумать какое-либо событие, которое я мог бы вызвать, когда сущность исчезнет. клик, зависание и т. д. не будут работать. – Peterd

ответ

1

три случая, чтобы рассмотреть здесь:

  1. Если DOM элемент отсоединяется (например, A-кадра <a-entity/>), а не хранить ссылку на элемент в переменной в любом месте, то вам не нужно развязывать прослушиватели событий - the listeners are cleaned up automatically.

  2. Если вы храните элемент повторно прикрепить его позже, то вы хотели бы удалить слушатель в remove(), так что в следующий раз init() работает, вы не начнете получать повторяющиеся события.

  3. Окончательный случай, и, вероятно, наиболее важным является то, что если ваш компонент связывает слушателей с другими элементами, чем его собственные (canvas, document или body, например), то вы определенно хотите, чтобы очистить ваших слушателей, так что ваши обратные вызовы не будут срабатывать для компонента, который больше не находится в сцене.

+0

Спасибо, это было то, чего я ожидал. Хотя мне нужно проверить (2). Это противоречит (1). Когда объект удален, регистраторы событий (на объекте) должны быть очищены. Поэтому, хотя мы имеем внешнюю ссылку на сущность, согласно (1), слушатели должны быть очищены. Я отправлю свой результат теста позже. – Peterd

+0

Выполнение: 'el.remove(); cache.el = el; 'браузер не будет автоматически очищать прослушиватели событий. Если этот элемент повторно привязан к DOM, а 'init()' снова связывает прослушиватели событий, у вас будут дублированные слушатели. Если ваш JS отбрасывает все ссылки на 'el', тогда браузер очищает прослушиватели событий (и невозможно, чтобы' el' был повторно подключен). –

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