Eine Ansicht in Backbone.js zerstören oder entfernen

Lesezeit: 4 Minuten

Eine Ansicht in Backbonejs zerstoren oder entfernen
Anzeige Taylor

Ich versuche derzeit, eine Methode zum Zerstören/Entfernen für Ansichten zu implementieren, aber ich kann 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 kann, damit, wenn eine neue Anfrage eingeht, vorherige Ansichten zerstört werden dann lädt die neuen.

Gibt es eine Möglichkeit, dies zu tun, ohne für jede Ansicht eine Entfernungsfunktion erstellen zu müssen?

  • Könnten Sie ein Beispiel dafür geben, was Ihrer Meinung nach ein Ökosystem ist? Ihre Frage lässt mich denken, dass es viele Ansichten auf der Seite gleichzeitig gibt. Ich kann mir nicht ganz vorstellen, was Sie zu tun versuchen und kann daher keine Antwort anbieten, die möglicherweise das ist, was Sie brauchen.

    – Bill Eisenhauer

    6. Juli ’11 um 0:35

  • einige andere Muster aus diesen tollen Beiträgen: lostechies.com/derickbailey/2011/09/15/… coenraets.org/blog/2012/01/…

    – daedelus_j

    9. Mai ’12 um 20:23

1641927116 461 Eine Ansicht in Backbonejs zerstoren oder entfernen
täglich

Ich musste absolut sicher sein, dass die Ansicht nicht nur von DOM entfernt, sondern auch völlig losgelöst von Ereignissen war.

destroy_view: function() {

    // COMPLETELY UNBIND THE VIEW
    this.undelegateEvents();

    this.$el.removeData().unbind(); 

    // Remove view from DOM
    this.remove();  
    Backbone.View.prototype.remove.call(this);

}

Scheint mir übertrieben zu sein, aber andere Ansätze haben den Zweck nicht vollständig erfüllt.

  • Für das, was ich gesehen habe, sollte this.remove() jQuerys remove aufrufen, das das Element aus dem DOM entfernen sollte, aber auch daran angehängte Daten und Ereignisse entfernen sollte. Also denke ich, dass der Aufruf von undelegateEvents und removeData nicht notwendig sein sollte… Habe ich recht?

    – öffnet als

    10. September ’12 um 22:42

  • @opensas Ereignisse blieben über this.remove() hinaus bestehen, obwohl das Element aus dem DOM entfernt wurde. this.undelegateEvents() wurde benötigt, damit alle Ereignisse die Bindung aufheben. Wie gesagt, es fühlte sich übertrieben an, aber es hat den Zweck erfüllt.

    – sdailey

    13. September ’12 um 18:06

  • Ich mag das. Obwohl Sie verwenden sollten this.$el anstatt $(this.el) 😉

    – mreq

    21. September ’12 um 12:36

  • +1 für eine gute Antwort auf mein Problem, +1 für das Schreiben Ihrer ersten Antwort 🙂

    – 1nfiniti

    17. November ’12 um 18:38

  • Meine Ansicht wird nicht neu gerendert, wenn ich sie zerstöre und neu erstelle. Ist es wegen this.remove()?

    – Raeesaa

    17. März ’14 um 7:54

Ohne alle Informationen zu kennen … Sie könnten einen Reset-Trigger an Ihr Modell oder Ihren Controller binden:

this.bind("reset", this.updateView);

und wenn Sie die Ansichten zurücksetzen möchten, lösen Sie einen Reset aus.

Gehen Sie für Ihren Rückruf wie folgt vor:

updateView: function() {
  view.remove();
  view.render();
};

  • Ich glaube nicht, dass das richtig ist. Die Entfernungsfunktion der Ansicht entfernt einfach das Element dieser Ansicht aus dem DOM (siehe hier). Ich denke, dieser Typ möchte das Ansichtsobjekt vollständig entfernen.

    – nahrhafte Zeit

    16. Mai ’12 um 13:52

  • this.remove() ruft schließlich jquerys remove() auf, das auch Daten und Ereignisse entfernt… Trotzdem denke ich, dass Sie auch this.undelegateEvents aufrufen müssen, um die Bindung von anderen Ereignissen wie benutzerdefinierten Ereignissen oder Änderungen am Modell aufzuheben.

    – öffnet als

    10. September ’12 um 23:28

  • this.remove() Anrufe this.stopListening() und this.$el.remove(). Die erste entfernt alle Ereignis-Listener, die mit . hinzugefügt wurden this.listenTo(...). Die zweite entfernt alle Ereignis-Listener, die mit jQuery hinzugefügt wurden. Zwischen den beiden sollten Sie behandelt werden, es sei denn, Sie haben andere Methoden zum Hinzufügen von Ereignis-Listenern verwendet. Diese Antwort ist also richtig und bekommt +1 von mir.

    – chowey

    8. März ’13 um 23:22

Eine Ansicht in Backbonejs zerstoren oder entfernen
Bassam Mehanni

Ich weiß, dass ich zu spät zur Party komme, aber hoffentlich wird dies für jemand anderen nützlich sein. Wenn Sie Backbone v0.9.9+ verwenden, können Sie Folgendes verwenden: listenTo und stopListening

initialize: function () {
    this.listenTo(this.model, 'change', this.render);
    this.listenTo(this.model, 'destroy', this.remove);
}

stopListening wird automatisch aufgerufen von remove. Sie können mehr lesen Hier und Hier

Dies ist, was ich verwendet habe. Habe keine Probleme gesehen.

destroy: function(){
  this.remove();
  this.unbind();
}

Laut aktueller Backbone-Dokumentation….

view.remove()

Entfernt eine Ansicht und ihr el aus dem DOM und ruft stopListening auf, um alle gebundenen Ereignisse zu entfernen, die die Ansicht mit listenTo’d versehen hat.

1641927116 141 Eine Ansicht in Backbonejs zerstoren oder entfernen
Chhorn Ponleu

Ich denke das sollte funktionieren

destroyView : function () {
    this.$el.remove();
}

Sie könnten den Weg nutzen, um das Problem zu lösen!

initialize:function(){
    this.trigger('remove-compnents-cart');
    var _this = this;
    Backbone.View.prototype.on('remove-compnents-cart',function(){
        //Backbone.View.prototype.remove;
        Backbone.View.prototype.off();
        _this.undelegateEvents();
    })
}

Eine andere Möglichkeit: Erstellen Sie eine globale Variable wie folgt:_global.routerList

initialize:function(){
    this.routerName="home";
    _global.routerList.push(this);
}
/*remove it in memory*/
for (var i=0;i<_global.routerList.length;i++){
    Backbone.View.prototype.remove.call(_global.routerList[i]);
}

  • Der erste Ansatz funktionierte für mich, ich hatte ein ähnliches Problem mit dem Ghosting von Ansichten und die Ereignisse wurden mehrmals ausgelöst, wenn jede Ansicht neu erstellt wurde, als Sie das Formular abschickten

    – ONYX

    8. Januar ’17 um 22:30 Uhr

.

380330cookie-checkEine Ansicht in Backbone.js zerstören oder entfernen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy