Ereignisse und DOM-Elemente

9

Nehmen wir an, dass ich eine Seite mit einem zweispaltigen Layout habe, wobei die linke Spalte eine Reihe von Links enthält und die verknüpfte HTML-Seite / Vorlage in der rechten Spalte geladen wird, wenn auf diese Verknüpfung geklickt wird.

Nach dem Laden einer Vorlage gibt es einen Template-Handler, der über requirejs als Singleton initialisiert wird und einige Methoden und Handler wie folgt definiert:

%Vor%

Dann füge ich jedes Mal, wenn die Seite geladen wird, DOM-Ereignisse durch eine Initialisierungsmethode an.

%Vor%

Wenn ich nun auf einen anderen Link auf der linken Seite klicke, wird eine andere Template-Seite geladen und der obige Prozess wird für diese Seite wiederholt.

Ich frage mich, was passiert mit dem Klickereignis, das dem btnSave-Element zuvor hinzugefügt wurde? Handelt es sich jetzt um einen unpassenden Event-Handler im jQuery-Cache?

Wenn ich versuche, es zu entfernen, wenn die gleiche Seite erneut geladen wird, wird das ursprüngliche Ereignis tatsächlich entfernt?

%Vor%

Verhindert die Ausführung des folgenden Blocks Memory Leaks / dangling references?

%Vor%

Was ist der beste Weg, um sicherzustellen, dass ich nicht mit fehlenden Referenzen und Speicherlecks auftrete? Dies ist eine potentielle Frage auch für einfaches JavaScript. Ich verstehe, dass das oben genannte nicht funktioniert, wenn die Vorlagenseite aktualisiert wird. Ich werde in der Zwischenzeit experimentieren, aber es wäre schön zu wissen, wie die Experten damit umgehen. Danke!

    
theoutlander 01.09.2014, 18:55
quelle

4 Antworten

1

Sehen Sie sich diese Folie von Andy Osmani, einem JavaScript-Guru, an. Sie finden hier die Antwort zu Speicherleck- und Kreisreferenzen: Ссылка

    
albanx 03.09.2014 06:40
quelle
0

Wenn Sie das neue tmpl laden, brauchen Sie nur das attach-Ereignis. Zum Beispiel:

$ ("# btnSave", $ (new_tmpl)). on ("klick", .....

    
cbertelegni 03.09.2014 04:38
quelle
0

Anstatt Clickereignis an Button anzuhängen, sollten Sie die Klick-Funktion an die Button-Laufzeit nach dem Laden der Vorlage anhängen. wie das

%Vor%

Es wird die tryMe-Klickfunktion an Ihre Schaltfläche angehängt, die Elementvariable sollte aus Ihrem Vorlageninhalt erstellt werden.

    
bharatpatel 03.09.2014 12:08
quelle
0

Warum sollte man es nicht einfach zu einem delegierten Ereignis machen und es nur einmal registrieren:

%Vor%

Auf diese Weise wird das click -Ereignis nur einmal gebunden und jQuery aktualisiert den Listener-Bereich, wenn sich das DOM ändert. Alles, was Sie tun müssen, ist, ein Mittel zur Verfügung zu stellen, um das richtige Objekt zu erhalten. Ohne mehr Code zu sehen, kann ich dir nicht helfen.

    
bonesbrigade 07.09.2014 03:15
quelle