Backbone-view-DOM-element entfernt
Immer wieder lese ich über die Backbone.js zombie (oder memory leak) problem. Im Grunde müssen Sie lösen und entfernen das element aus dem DOM, wenn Sie Sie nicht mehr benötigen, um sicherzustellen, dass alle Ereignisse entfernt werden, wie gut.
Nun, ich habe eine single-page-app mit ein paar Containern:
<div id="page1"></div>
<div id="page2"></div>
und meine underscore.js Vorlagen für diese Platzhalter. Ich habe ein Modell pro Seite wie:
HomeView = Backbone.View.extend({
el: '#page1'
)}
Nun, wenn ich auf ein element auf dieser Seite navigiere ich zu einem anderen Backbone.js Ansicht:
clicked: function(ev){
$(this.el).remove(); //<-- this is the problem
$(this.el).unbind();
App.navigate('page/2', true);
}
Dieser funktioniert einwandfrei, aber... ich entfernte die page1
element vom DOM-also wenn ich mit der zurück-Taste gelangen Sie zur vorherigen Seite mein element ist verschwunden und es gibt nichts zu befestigen Sie den HTML-Code.
Ich wahrscheinlich gar nicht verstehen, wie man link Backbone.js Ansichten mit DOM... sollte ich halten das element mit dem Risiko von memory leaks?
Dank!
Hier gehen Sie auf: lostechies.com/derickbailey/2011/09/15/...
gut derick tut versorgen Sie mit, eine Lösung hat er nicht? eine view manager-oder wie Sie es nennen wollen.
InformationsquelleAutor Cimm | 2011-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie der Artikel sagt, (ja, ich habe versucht, seine Methoden, bevor Sie in meine eigenen Projekte), müssen Sie einen Weg finden, entfernen Sie Ihre anzeigen, das DOM-element und die Bindung der Ereignisse.
Es gibt jedoch 2 Arten von events, 1) Rückgrat von Ereignissen, 2) die Ereignisse, die verpflichtet sind, Ihre DOM-Elemente mit jQuery.
Also statt Ihrer:
Hierzu:
Sind Sie jetzt entfernen Backbone-Veranstaltungen als auch, und das
this.remove
auf einen Blick rufen$(this.el).remove();
.Aber das ist nur so entfernen Sie eine Ansicht nicht verlassen und zombies. Sie sollten erwägen, seine Methoden zeigt eine Ansicht, um diesen Prozess mehr automatisch.
Das ist alles in seinem Artikel.
es gibt keinen eingebauten Weg, weil Sie, wenn Sie würde haben diese gebaut, in der es einschränken würde zu viele Benutzer, wie Sie apps erstellen, Rückgrat gibt lediglich eine gewisse Struktur, um Ihre apps, wählen Sie, was und wie Sie wollen, es zu realisieren,, die Freiheit ist der Schlüssel! 🙂 so jetzt gibt es keine built in view manager, während derick ' s Idee ist nicht die einzige Idee, und wahrscheinlich nicht der Heilige Gral, es ist ein großer Sprung nach vorne 🙂
InformationsquelleAutor Sander
In Bezug zu verlieren die Seite1 element in Ihrer Seite, und daher nicht in der Lage, füllen Sie das Element mit HTML habe ich Folgendes.
Anstelle von:
... entfernt das element vollständig, und dann versuchen Sie herauszufinden, wie um es zurück, ich verwende jQuery:
Dies leert alle child-Elemente, text -, Daten-und Ereignis-Handler. Mehr info unter: http://api.jquery.com/empty/
In der Tat, ich benutze alle der folgenden, die zuviel aber wir werden sehen:
Hoffe, dies ist nützlich!
InformationsquelleAutor Alejandro Rubio
Rückgrat Entwicklung version(master) jetzt stellt _removeElement()
Entfernen dieser Ansicht wird das element aus dem Dokument und alle Ereignis-Listener angehängt ist. Ausgesetzt für die Unterklassen durch eine alternative DOM-manipulation API.
http://backbonejs.org/docs/backbone.html
InformationsquelleAutor d0001