0

Ich habe eine einmal instanziierte Kalenderklasse und dann eine EventHandler-Klasse, die einmal im Konstruktor des Kalenders instanziiert wurde. Ich füge Ereignis-Listener hinzu, indem ich "this" (das Calendar-Objekt) an sie binden, damit ich auf das Calendar-Objekt in ihnen zugreifen kann. Das alles funktioniert gut.Javascript - removeEventListener scheint eine andere Version des Handlers zu bekommen?

Das heißt, bis ich versuche, Ereignis-Listener in einem Ereignishandler hinzuzufügen und zu binden „das“ das ist immer noch das Kalender-Objekt zu ihnen. Das Hinzufügen funktioniert, aber das Entfernen des Ereignis-Listeners funktioniert nicht. Es sieht so aus, als ob die Entfernung eine andere Kopie der Funktion erhält, die ich übergeben habe, als ich sie hinzugefügt habe. Hier ist das Hinzufügen von Ereignis-Listener im Kalender:

this.containerDiv.addEventListener("mousedown", this.eventHandler.calMousedown.bind(this)); 

dann in calMousedown in Eventhandler, ich dies tun:

this.containerDiv.addEventListener("mousemove", this.eventHandler.calMousemove.bind(this)); 

aber dann in einem anderen Handler, entferne ich, dass die Hörer wie folgt aus:

this.containerDiv.removeEventListener("mousemove", this.eventHandler.calMousemove.bind(this)); 

aber es entfernt es nicht. "Dies" sollte das einzelne Kalenderobjekt überall sein, aber es ist, als ob das Entfernen eine andere Kopie der Funktion hat. Ich habe überprüft, dass "dies" das Kalenderobjekt in allen Handlern ist. Ich habe auch versucht, die ".bind (this)" auf dem Remove zu entfernen, das hat auch nicht funktioniert. Wie wird das nicht entfernt?

+0

Ye, weil 'bind()' wird eine neue Funktionsreferenz –

Antwort

0

bind erstellt eine neue Funktion, aber Sie können es Cache:

var handler = this.eventHandler.calMousedown.bind(this); 

this.containerDiv.addEventListener("mousedown", handler); 
... 
this.containerDiv.removeEventListener("mousedown", handler); 
+0

Arbeitete groß zurückzukehren. Ich habe nicht realisiert, dass bind eine neue Kopie erstellt. Danke vielmals. – linus72982

+0

Ich werde in 10 Minuten akzeptieren, wenn es mich lässt. – linus72982