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');
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.
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.
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');
Odpowiedzi:
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ć.
źródło
google.maps.event.clearListeners(map, 'idle')
Pracuje. Alemap.clearListeners('idle')
tak nie jest. Ta składnia działa dla wszystkich innych elementów interfejsu API (.addListener
itp.). Dziwny.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);
źródło
Wydaje się, że to działa w obecnej wersji.
var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() { // Handler code. }); listenerHandle.remove();
źródło
listenerHandler.remove()
działa również dla słuchaczy warstwy danych - tj.google.maps.data.addListener
- ponieważ NIE magoogle.maps.data.removeListener
zdefiniowanej metody.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');
źródło