Interfejs API Map Google v3: Jak usunąć nasłuchiwanie wydarzeń?

91

Jak usunąć odbiornik zdarzeń „bounds_changed” w Google Maps API v3 ?

google.maps.event.removeListener(_???_);    
poseł_
źródło
1
Myślę, że znalazłem to, czego szukałeś. Była to trzecia funkcja zdarzenia w dokumentacji API.
Maiku Mori
1
Czuję twój ból. Można by pomyśleć, że ta dokumentacja znajduje się na code.google.com/apis/maps/documentation/javascript/events.html, ale tak nie jest. Grrrr
Drew LeSueur

Odpowiedzi:

152

Zwykle odpowiedzi na takie pytania można znaleźć w dokumentacji interfejsu API Map Google.

Jak powiedział Andrew, addListener zwraca uchwyt, którego można później użyć do usunięcia detektora. Dzieje się tak, ponieważ jedno zdarzenie może mieć wielu detektorów i aby je usunąć, należy zapisać odniesienie do każdego z dołączonych detektorów.

Istnieje również funkcja, która usuwa wszystkich słuchaczy w tym samym czasie:

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

Oto dokumentacja interfejsu API Map Google, w której możesz o tym przeczytać.

Maiku Mori
źródło
2
Czy to usunie TYLKO zdarzenie bounds_changed?
mp_
Jakie są zalety / wady korzystania z tej metody w porównaniu z metodą Andrewsa?
mp_
Spowoduje to usunięcie wszystkich detektorów ze zdarzenia bounds_changed. Chociaż metoda Andrew usuwa jeden. Jeśli nie chcesz gdzieś przechowywać uchwytu i musisz martwić się tylko o 1 odbiorcę dla danego zdarzenia, to jest droga do zrobienia.
Maiku Mori
Jak powiedziałem, zdarzenia mogą mieć wielu słuchaczy, ale wygląda na to, że używasz tylko 1 w swoim kodzie. Jeśli zrozumiesz tę koncepcję, zobaczysz różne zastosowania obu funkcji. Zobacz również link, który podałem, zawiera ładne wyjaśnienia obu tych funkcji.
Maiku Mori
2
Domyśliłam się. google.maps.event.clearListeners(map, 'idle')Pracuje. Ale map.clearListeners('idle')tak nie jest. Ta składnia działa dla wszystkich innych elementów interfejsu API ( .addListeneritp.). Dziwny.
Andy Mercer
93

addListener zwraca uchwyt, który możesz później przekazać do removeListener:

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {

google.maps.event.removeListener(listenerHandle);
Andrzej
źródło
Więc nie ma już zmiennych statycznych dla słuchaczy?
mp_
Słuchacze muszą być usuwani jeden po drugim. Nie możesz ich wszystkich rozpiąć ala jQuery. Wiem, bo myślałem to samo i w tej kwestii też się pogubiłem. W końcu to rozpracowałem, a powyższy pseudokod z grubsza ilustruje, jak to zrobiłem.
Andrew,
1
Kurcze! Twoja jest lepsza odpowiedź.
Andrew,
4
Lepsza odpowiedź dla mnie, to usunięcie tylko stworzonego przez nas nasłuchiwania wydarzeń i nie ma to wpływu na inne skrypty
Matthieu Napoli
2
Lepsza odpowiedź z dwóch powodów. Tylko usuwa faktycznego słuchacza. Nie ma też wstrętnego „Możesz to znaleźć w komentarzu dokumentacji API.
keithhackbarth
17

Wydaje się, że to działa w obecnej wersji.

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {
    // Handler code.
});
listenerHandle.remove();
eter 6
źródło
A fajną rzeczą w tym podejściu jest to, że listenerHandler.remove()działa również dla słuchaczy warstwy danych - tj. google.maps.data.addListener- ponieważ NIE ma google.maps.data.removeListenerzdefiniowanej metody.
Christopher King
0

Jeśli nie możesz w jakiś sposób utrzymać obiektu detektora, możesz usunąć nasłuchiwanie bezpośrednio jako google.maps.event.clearListeners(objectListened, 'event');

Dawny: google.maps.event.clearListeners(map, 'bounds_changed');

Tarık Özgün Güner
źródło