Ich versuche derzeit, eine Zerstörungs- / Entfernungsmethode für Ansichten zu implementieren, kann jedoch keine generische Lösung für alle meine Ansichten finden.
Ich hatte gehofft, dass es ein Ereignis geben würde, das an den Controller angehängt werden könnte. Wenn eine neue Anforderung eingeht, werden frühere Ansichten zerstört und die neuen geladen.
Gibt es eine Möglichkeit, dies zu tun, ohne für jede Ansicht eine Entfernungsfunktion erstellen zu müssen?
javascript
javascript-events
backbone.js
Ad Taylor
quelle
quelle
Antworten:
Ohne alle Informationen zu kennen ... Sie könnten einen Reset-Trigger an Ihr Modell oder Ihren Controller binden:
Wenn Sie die Ansichten zurücksetzen möchten, lösen Sie einen Reset aus.
Führen Sie für Ihren Rückruf Folgendes aus:
quelle
this.remove()
Anrufethis.stopListening()
undthis.$el.remove()
. Der erste entfernt alle Ereignis-Listener, die mit hinzugefügt wurdenthis.listenTo(...)
. Die zweite Option entfernt alle Ereignis-Listener, die mit jQuery hinzugefügt wurden. Zwischen den beiden sollten Sie abgedeckt sein, es sei denn, Sie haben andere Methoden zum Hinzufügen von Ereignis-Listenern verwendet. Diese Antwort ist also richtig und bekommt +1 von mir.Ich musste absolut sicher sein, dass die Ansicht nicht nur aus DOM entfernt, sondern auch völlig ungebunden von Ereignissen war.
Es schien mir übertrieben, aber andere Ansätze haben den Trick nicht vollständig geschafft.
quelle
this.$el
anstelle von verwenden sollten$(this.el)
;)this.remove()
?Ich weiß, dass ich zu spät zur Party komme, aber hoffentlich ist dies für jemand anderen nützlich. Wenn Sie Backbone v0.9.9 + verwenden, können Sie
listenTo
und verwendenstopListening
stopListening
wird automatisch von aufgerufenremove
. Hier und hier können Sie mehr lesenquelle
Das habe ich benutzt. Ich habe keine Probleme gesehen.
quelle
Laut aktueller Backbone-Dokumentation ....
view.remove ()
Entfernt eine Ansicht und ihr Element aus dem DOM und ruft stopListening auf, um alle gebundenen Ereignisse zu entfernen, für die die Ansicht listenTo'd hat.
quelle
Ich denke das sollte funktionieren
quelle
this.stopListening()
und dannreturn this
für ein gutes Maß tötenSie könnten den Weg nutzen, um das Problem zu lösen!
Ein anderer Weg: Erstellen Sie eine globale Variable wie folgt:
_global.routerList
quelle