API Карт Google v3: Як видалити слухач подій?


91

Як видалити прослуховувач подій "bounds_changed" в API Карт Google v3 ?

google.maps.event.removeListener(_???_);    

1
Здається, я знайшов те, що ти шукав. Це була третя функція події в документах API.
Maiku Mori

1
Я відчуваю твій біль. Ви можете подумати, що ця документація буде розміщена на code.google.com/apis/maps/documentation/javascript/events.html, але ні. Grrrr
Drew LeSueur

Відповіді:


152

Зазвичай ви можете знайти відповіді на такі запитання в документації API Google Maps.

Як сказав Ендрю, addListener повертає дескриптор, який ви можете використовувати пізніше для видалення слухача. Це тому, що в одній події може бути багато слухачів, і для їх видалення потрібно зберегти посилання на кожного із приєднаних слухачів.

Також є функція, яка видаляє всіх слухачів одночасно:

clearListeners(instance:Object, eventName:string);
//In your case:
google.maps.event.clearListeners(map, 'bounds_changed');

Ось посилання на API Карт Google, де ви можете про це прочитати.


2
То чи буде це видалити ТІЛЬКИ подію bounds_changed?
mp_

У чому плюси / мінуси використання цього методу проти методу Ендрюса?
mp_

Це видаляє всіх слухачів з події bounds_changed. Тоді як метод Ендрю видаляє один. Якщо ви не хочете десь зберігати дескриптор, і вам потрібно турбуватися лише про одного слухача для даної події, тоді це шлях.
Maiku Mori

Як я вже говорив, події можуть мати багато слухачів, але, здається, ви просто використовуєте 1 у своєму коді. Якщо ви зрозумієте цю концепцію, ви побачите різне використання обох функцій. Також дивіться посилання, яке я надав, воно містить приємні пояснення обох цих функцій.
Maiku Mori

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_

Слухачів потрібно видаляти по одному. Ви не можете розв’язати їх усіх, але a jQuery. Я знаю, тому що я думав те саме і теж заплутався з цього приводу. Врешті-решт я це розробив, і псевдокод вище приблизно ілюструє, як я це зробив.
Ендрю

1
Драт! Ваша - краща відповідь.
Ендрю

4
Краща відповідь для мене, це видалення лише прослуховувача подій, який ми створили, і це не впливає на інші сценарії
Матьє Наполі

2
Краща відповідь з двох причин. Тільки, видаляє фактичний слухач. Крім того, немає хитромудрого "Ви можете знайти це в коментарі до документів API.
keithhackbarth,

16

Здається, це працює в поточному випуску.

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {
    // Handler code.
});
listenerHandle.remove();

І приємна річ цього підходу полягає в тому, що він listenerHandler.remove()працює і для слухачів рівня даних - тобто google.maps.data.addListener- оскільки google.maps.data.removeListenerметод НЕ визначений.
Крістофер Кінг


0

Якщо ви не можете якось утримувати об'єкт слухача, ви можете видалити слухача (слухачів) безпосередньо як google.maps.event.clearListeners(objectListened, 'event');

Приклад: google.maps.event.clearListeners(map, 'bounds_changed');

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.