Обычно ответы на такие вопросы можно найти в документации Google Maps API.
Как сказал Эндрю, addListener возвращает дескриптор, который вы можете использовать позже, чтобы удалить слушателя. Это потому, что у одного события может быть много слушателей, и чтобы удалить их, вы должны сохранить ссылку на каждый из прикрепленных слушателей.
Также есть функция, которая удаляет всех слушателей одновременно:
clearListeners(instance:Object, eventName:string);
//In your case:
google.maps.event.clearListeners(map, 'bounds_changed');
В чем преимущества этого метода по сравнению с методом Эндрюса?
mp_
Это удаляет всех слушателей из события bounds_changed. Пока метод Андрея убирает один. Если вы не хотите где-то хранить дескриптор, и вам нужно беспокоиться только об 1 слушателе для данного события, тогда это правильный путь.
Майку Мори,
Как я уже сказал, у событий может быть много слушателей, но похоже, что вы просто используете 1 в своем коде. Если вы поймете эту концепцию, вы увидите различное использование обеих функций. Также см. Ссылку, которую я предоставил, там есть хорошие объяснения для обеих этих функций.
Майку Мори,
2
Догадаться. google.maps.event.clearListeners(map, 'idle')работает. Но map.clearListeners('idle')не делает. Этот синтаксис работает для всего остального в API ( .addListenerи т. Д.). Странный.
Энди Мерсер,
93
addListener возвращает дескриптор, который позже можно передать removeListener:
var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {
google.maps.event.removeListener(listenerHandle);
Значит, для слушателей больше нет статических переменных?
mp_
Слушателей нужно удалять по одному. Вы не можете их всех отвязать аля jQuery. Я знаю, потому что думал так же и тоже запутался в этом вопросе. В конце концов я решил это, и приведенный выше псевдокод примерно иллюстрирует, как я это сделал.
Эндрю
1
Драт! Ваш является лучшим ответом.
Эндрю
4
Для меня лучший ответ: это удаляет только созданный нами прослушиватель событий, и это не влияет на другие скрипты
Матье Наполи
2
Лучший ответ по двум причинам. Только удаляет фактического слушателя. Кроме того, в нем нет язвительности "Вы можете найти это в комментарии к документации API.
И что хорошо в этом подходе, так это то, что он listenerHandler.remove()работает и для слушателей уровня данных, т. Е. google.maps.data.addListenerПоскольку здесь НЕТ google.maps.data.removeListenerопределенного метода.
Если вы не могли каким-то образом удерживать объект слушателя, вы могли бы удалить слушателя (ов) напрямую как google.maps.event.clearListeners(objectListened, 'event');
Ответы:
Обычно ответы на такие вопросы можно найти в документации Google Maps API.
Как сказал Эндрю, addListener возвращает дескриптор, который вы можете использовать позже, чтобы удалить слушателя. Это потому, что у одного события может быть много слушателей, и чтобы удалить их, вы должны сохранить ссылку на каждый из прикрепленных слушателей.
Также есть функция, которая удаляет всех слушателей одновременно:
clearListeners(instance:Object, eventName:string); //In your case: google.maps.event.clearListeners(map, 'bounds_changed');
Вот справочник по API Карт Google, где вы можете прочитать об этом.
источник
google.maps.event.clearListeners(map, 'idle')
работает. Ноmap.clearListeners('idle')
не делает. Этот синтаксис работает для всего остального в API (.addListener
и т. Д.). Странный.addListener возвращает дескриптор, который позже можно передать removeListener:
var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() { google.maps.event.removeListener(listenerHandle);
источник
Кажется, это работает в текущей версии.
var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() { // Handler code. }); listenerHandle.remove();
источник
listenerHandler.remove()
работает и для слушателей уровня данных, т. Е.google.maps.data.addListener
Поскольку здесь НЕТgoogle.maps.data.removeListener
определенного метода.Если вы не могли каким-то образом удерживать объект слушателя, вы могли бы удалить слушателя (ов) напрямую как
google.maps.event.clearListeners(objectListened, 'event');
Пример:
google.maps.event.clearListeners(map, 'bounds_changed');
источник