Google Maps API v3: Bagaimana cara menghapus Event Listener?

91

Bagaimana cara menghapus pemroses acara 'bounds_changed' di Google Maps API v3 ?

google.maps.event.removeListener(_???_);    
mp_
sumber
1
Saya rasa saya menemukan apa yang Anda cari. Itu adalah fungsi acara ke-3 di dokumen API.
Maiku Mori
1
Saya merasakan sakit Anda. Anda akan mengira dokumentasi ini ada di code.google.com/apis/maps/documentation/javascript/events.html tetapi sebenarnya tidak. Grrrr
Drew LeSueur

Jawaban:

152

Biasanya Anda dapat menemukan jawaban untuk pertanyaan semacam itu di dokumentasi Google Maps API.

Seperti yang dikatakan Andrew, addListener mengembalikan pegangan yang dapat Anda gunakan nanti untuk menghapus pemroses. Itu karena satu peristiwa dapat memiliki banyak pendengar dan untuk menghapusnya, Anda harus menyimpan referensi ke setiap pendengar yang dilampirkan.

Ada juga fungsi yang menghapus semua pendengar pada saat bersamaan:

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

Berikut adalah referensi Google Maps API tempat Anda dapat membacanya.

Maiku Mori
sumber
2
Jadi apakah ini HANYA akan menghapus acara bounds_changed?
mp_
Apa pro / kontra menggunakan metode ini vs metode Andrews?
mp_
Ini menghapus semua pendengar dari acara bounds_changed. Sedangkan metode Andrew menghapus satu. Jika Anda tidak ingin menyimpan pegangan di suatu tempat dan Anda hanya perlu mengkhawatirkan 1 pendengar untuk acara tertentu, inilah cara yang harus dilakukan.
Maiku Mori
Seperti yang saya katakan, acara dapat memiliki banyak pendengar, tetapi sepertinya Anda hanya menggunakan 1 dalam kode Anda. Jika Anda memahami konsep itu, Anda akan melihat perbedaan penggunaan untuk kedua fungsi tersebut. Juga lihat tautan yang saya berikan, ini memiliki penjelasan yang bagus untuk kedua fungsi tersebut.
Maiku Mori
2
Menemukannya. google.maps.event.clearListeners(map, 'idle')bekerja. Tapi map.clearListeners('idle')tidak. Sintaks itu berfungsi untuk semua hal lain di API ( .addListener, dll). Aneh.
Andy Mercer
93

addListener mengembalikan pegangan yang nantinya bisa Anda teruskan ke removeListener:

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

google.maps.event.removeListener(listenerHandle);
Andrew
sumber
Jadi tidak ada lagi variabel statis untuk pendengar?
mp_
Pendengar perlu disingkirkan satu per satu. Anda tidak dapat melepaskan semuanya ala jQuery. Saya tahu karena saya berpikiran sama dan menjadi bingung tentang hal ini juga. Saya akhirnya berhasil dan pseudo-code di atas secara kasar menggambarkan bagaimana saya melakukannya.
Andrew
1
Drat! Anda adalah jawaban yang lebih baik.
Andrew
4
Jawaban yang lebih baik bagi saya, itu hanya menghapus pendengar acara yang kami buat dan itu tidak memengaruhi skrip lain
Matthieu Napoli
2
Jawaban yang lebih baik karena dua alasan. Hanya, menghapus pendengar yang sebenarnya. Juga, tidak memiliki snarky "Anda dapat menemukannya di komentar dokumen API.
keithhackbarth
17

Ini tampaknya berfungsi di rilis saat ini.

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {
    // Handler code.
});
listenerHandle.remove();
ether6
sumber
Dan hal yang menyenangkan tentang pendekatan ini adalah yang listenerHandler.remove()bekerja untuk pendengar lapisan data - yaitu google.maps.data.addListener- karena tidak ada google.maps.data.removeListenermetode yang ditentukan.
Christopher King
0

Jika Anda tidak dapat menahan objek listener, Anda dapat menghapus listener secara langsung sebagai google.maps.event.clearListeners(objectListened, 'event');

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

Tarık Özgün Güner
sumber