Google Maps API v3: Bir Etkinlik İşleyici nasıl kaldırılır?


91

Google Maps API v3'te 'bounds_changed' Etkinlik dinleyicisini nasıl kaldırırım ?

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

1
Sanırım aradığınızı buldum. API belgelerinde 3. olay işleviydi.
Maiku Mori

1
Acını hissediyorum. Bu belgenin code.google.com/apis/maps/documentation/javascript/events.html adresinde olacağını düşünürsünüz, ancak değildir. Grrrr
Drew LeSueur

Yanıtlar:


152

Genellikle bu tür soruların yanıtlarını Google Haritalar API belgelerinde bulabilirsiniz.

Andrew'un dediği gibi, addListener daha sonra dinleyiciyi kaldırmak için kullanabileceğiniz bir tutamaç döndürür. Bunun nedeni, tek bir olayın birçok dinleyiciye sahip olabilmesidir ve bunları kaldırmak için ekli dinleyicilerin her birine bir başvuru kaydetmeniz gerekir.

Tüm dinleyicileri aynı anda kaldıran bir işlev de vardır:

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

İşte hakkında okuyabileceğiniz Google Haritalar API referansı .


2
Bu, YALNIZCA bounds_changed olayını kaldırır mı?
mp_

Andrews yöntemine karşı bu yöntemi kullanmanın artıları / eksileri nedir?
mp_

Bu, tüm dinleyicileri bounds_changed olayından kaldırır. Andrew'un yöntemi birini kaldırırken. Tanıtıcıyı bir yerde saklamak istemiyorsanız ve belirli bir olay için yalnızca 1 dinleyici için endişelenmeniz gerekiyorsa, o zaman gitmenin yolu budur.
Maiku Mori

Dediğim gibi olayların birçok dinleyicisi olabilir, ancak kodunuzda sadece 1 kullanıyorsunuz gibi görünüyor. Bu kavramı anlarsanız, her iki işlevin farklı kullanımlarını göreceksiniz. Ayrıca verdiğim bağlantıya bakın, bu işlevlerin her ikisi için de güzel açıklamalar var.
Maiku Mori

2
Anladım. google.maps.event.clearListeners(map, 'idle')İşler. Ama map.clearListeners('idle')yapmaz. Bu sözdizimi, API'deki ( .addListenervb.) Diğer her şey için çalışır . Garip.
Andy Mercer

93

addListener, daha sonra removeListener'a iletebileceğiniz bir tutamaç döndürür:

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

google.maps.event.removeListener(listenerHandle);

Yani dinleyiciler için artık statik değişkenler yok mu?
mp_

Dinleyicilerin tek tek kaldırılması gerekiyor. Bunların hepsini ala jQuery ile çözemezsiniz. Biliyorum çünkü ben de aynı şeyi düşündüm ve bu noktada da kafam karıştı. Sonunda çözdüm ve yukarıdaki sözde kod kabaca nasıl yaptığımı gösteriyor.
Andrew

1
Kahretsin! Sevgiler olan daha iyi bir yanıt.
Andrew

4
Benim için daha iyi cevap, bu sadece oluşturduğumuz olay dinleyicisini kaldırmak ve diğer senaryoları etkilemiyor
Matthieu Napoli

2
İki nedenden dolayı daha iyi cevap. Yalnızca, gerçek dinleyiciyi kaldırır. Ayrıca, snarky de yok "API belgelerinin yorumunda bulabilirsiniz.
keithhackbarth

17

Bu, mevcut sürümde işe yarıyor gibi görünüyor.

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

Ve bu yaklaşımın güzel yanı listenerHandler.remove(), veri katmanı dinleyicileri için de işe yaramasıdır - yani google.maps.data.addListener- google.maps.data.removeListenertanımlanmış HİÇBİR yöntem olmadığı için .
Christopher Kral


0

Dinleyici nesnesini bir şekilde tutamazsanız, dinleyicileri doğrudan şu şekilde kaldırabilirsiniz: google.maps.event.clearListeners(objectListened, 'event');

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.