Von den Polymer documentation über Event-Listener:Warum Event-Listener jemals löschen?
Verwenden Sie die automatische Knoten zu finden und die Bequemlichkeit Methoden hören und> UNLISTEN.
this.listen(this.$.myButton, 'tap', 'onTap');
this.unlisten(this.$.myButton, 'tap', 'onTap');
The listener callbacks are invoked with this set to the element instance.
Wenn Sie einen Zuhörer unbedingt hinzufügen, müssen Sie es unbedingt entfernen. Dies geschieht üblicherweise in den angehängten und getrennten Callbacks. Wenn Sie das Listener-Objekt oder die Listener mit Listenereignis verwenden, fügt Polymer die Ereignislistener automatisch hinzu und entfernt sie.
Fragen:
Warum ist es wichtig, erst nach
attached()
, an Veranstaltungen der Elemente in dem lokalen DOM hören sie dann zu entfernen, wenndetached()
?Werden Ereignis-Listener nicht automatisch gelöscht, wenn das beobachtete DOM-Objekt zerstört wird?
Würde dies auch dann gelten, wenn Sie Ereignisse für Elemente in Ihrem hellen DOM hören?
"Code ist möglicherweise nicht in der Lage, Garbage Collection zu sammeln, wenn Ereignis-Listener auf Code verweisen" - Was ist, wenn der Code Garbage Collected ist, da das DOM-Element gelöscht wird? – Merc
Das Entfernen des Elements aus dem DOM steht nicht im Zusammenhang mit GC. Wenn auf das Element von irgendwo anders im Code verwiesen wird, spielt es keine Rolle, ob es aktuell zum DOM hinzugefügt wird oder nicht. Wenn das Element ohne Referenzen von oder zu ihm eigenständig ist, dann kann das Entfernen von Ereignis-Listenern überflüssig sein, aber als @Whothehellist, das "besser sicher als Nachsicht" sagt. Es empfiehlt sich immer, alle Ressourcen freizugeben, die Sie angefordert haben. –