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(_???_);    

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ć.


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);

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();

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');

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.