2009-05-26 6 views
0

Je ne pense pas ce qui est particulièrement bizarre, mais dans une tentative de contrôler mon code JavaScript (si elle est possible de contrôler vraiment JavaScript ;-)) Je J'ai enveloppé tous mes JavaScript côté client dans de beaux objets. Ou aussi beau que je peux les faire de toute façon.Fixation et événements Détacher à/de Virtual Earth Cartes

L'un des premiers problèmes que j'ai rencontrés était d'attacher des événements à n'importe quoi à partir de ces objets. Il est vite devenu évident que ce ne signifie pas toujours ce que vous pensez que cela signifie et par conséquent mon code devrait ressembler à ceci:

var obj = this; 
_map.AttachEvent("onclick", function(event){ obj.onClickMap(event); }); 

De cette façon, tous les événements appellent l'objet courant. Jobs un bon 'un. Toutefois, lorsque vous détachez des événements de l'objet de carte Virtual Earth, vous devez transmettre la fonction que vous avez initialement assignée afin que seule cette dernière soit désaffectée. Cela ne fonctionne pas:

_map.DetachEvent("onclick", function(event){ obj.onClickMap(event); }); 

... pas que je m'y attendais vraiment. Mais je ne peux pas savoir comment déconnecter cet événement!

Répondre

0

Aha! Un éclair d'inspiration soudaine m'a conduit à cette solution (qui peut ou peut ne pas être la meilleure façon, mais cela fonctionne). Lors de la fixation de l'événement que j'utilise ceci:

// Attach map events 
var obj = this; 
_currentOnClickMapHandler = function(event){ obj.onClickMap(event); }; 
_map.AttachEvent("onclick", _currentOnClickMapHandler); 

_currentOnClickMapHandler est une approche globale de la classe.

Quand je veux détacher l'événement que j'utilise ceci:

if (_currentOnClickMapHandler) 
{ 
    _map.DetachEvent("onclick", _currentOnClickMapHandler); 
} 

semble fonctionner, et la raison est assez évident pour moi que la raison pour laquelle je ne suis pas trop préoccupé par comme une solution. Si quelqu'un a une meilleure idée (ou est d'accord avec cette solution, donc je peux me sentir plus en sécurité à ce sujet!) Alors s'il vous plaît faites le moi savoir.

1

Eh bien vous pouvez évidemment stocker la fonction:

var obj = this; 
var func = function(event){ obj.onClickMap(event); } 
_map.AttachEvent("onclick", func); 

Et puis détachez:

_map.DetachEvent("onclick", func); 

Est-ce que l'aide?

+0

Nice one ... vous devez avoir entré cela en même temps que je l'ai fait! Deux réponses indépendantes qui disent la même chose sont plus que suffisantes pour moi. Merci. – Jason

Questions connexes