API do Google Maps v3: como remover um listener de eventos?

91

Como faço para remover o ouvinte de eventos 'bounds_changed' na API do Google Maps v3 ?

google.maps.event.removeListener(_???_);    
mp_
fonte
1
Acho que encontrei o que você estava procurando. Foi a 3ª função de evento nos documentos da API.
Maiku Mori,
1
Eu sinto sua dor. Você pensaria que esta documentação estaria em code.google.com/apis/maps/documentation/javascript/events.html, mas não está. Grrrr
Drew LeSueur

Respostas:

152

Normalmente, você pode encontrar respostas para essas perguntas na documentação da API do Google Maps.

Como disse Andrew, addListener retorna um identificador que você pode usar posteriormente para remover o ouvinte. Isso porque um único evento pode ter muitos ouvintes e para removê-los você deve salvar uma referência para cada um dos ouvintes anexados.

Também existe uma função que remove todos os ouvintes ao mesmo tempo:

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

Aqui está a referência da API do Google Maps, onde você pode ler sobre isso.

Maiku Mori
fonte
2
Então, isso removerá SOMENTE o evento bounds_changed?
mp_
Qual é a vantagem / desvantagem de usar esse método em comparação ao método de Andrews?
mp_
Isso remove todos os ouvintes do evento bounds_changed. Enquanto o método de Andrew remove um. Se você não deseja armazenar o identificador em algum lugar e só precisa se preocupar com 1 ouvinte para determinado evento, este é o caminho a percorrer.
Maiku Mori,
Como eu disse, os eventos podem ter muitos ouvintes, mas parece que você está usando apenas 1 em seu código. Se você entender esse conceito, verá os diferentes usos para ambas as funções. Veja também o link que forneci, ele tem boas explicações para ambas as funções.
Maiku Mori,
2
Descobri isso. google.maps.event.clearListeners(map, 'idle')trabalho. Mas map.clearListeners('idle')não. Essa sintaxe funciona para tudo o mais na API ( .addListener, etc). Ímpar.
Andy Mercer
93

addListener retorna um identificador que você pode passar posteriormente para removeListener:

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

google.maps.event.removeListener(listenerHandle);
Andrew
fonte
Portanto, não há mais variáveis ​​estáticas para os ouvintes?
mp_
Os ouvintes precisam ser removidos um por um. Você não pode desvincular todos eles ala jQuery. Eu sei porque pensei o mesmo e fiquei confuso neste ponto também. Acabei descobrindo e o pseudocódigo acima ilustra de forma aproximada como eu fiz isso.
Andrew,
1
Droga! A sua é uma resposta melhor.
Andrew,
4
Melhor resposta para mim, isso é remover apenas o listener de evento que criamos e não afeta os outros scripts
Matthieu Napoli
2
Melhor resposta por dois motivos. Apenas remove o ouvinte real. Além disso, não tem o snarky "Você pode encontrá-lo no comentário dos documentos da API.
keithhackbarth
16

Isso parece funcionar na versão atual.

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {
    // Handler code.
});
listenerHandle.remove();
ether6
fonte
E o bom dessa abordagem é que ela também listenerHandler.remove()funciona para ouvintes da camada de dados - ou seja, google.maps.data.addListeneruma vez que NÃO há nenhum google.maps.data.removeListenermétodo definido.
Christopher King de
0

Se você não pudesse segurar o objeto ouvinte de alguma forma, você poderia remover ouvinte (s) diretamente como google.maps.event.clearListeners(objectListened, 'event');

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

Tarık Özgün Güner
fonte