2011-12-04 16 views
5
var CheckboxView = Backbone.View.extend({ 
     tagName:'div', 
     template: _.template(item_temp,{}), 
     events:{ 
      'click .checkoff_friend':'toggleCheckFriend', 
     }, 
     initialize: function(){ 
     }, 
     render:function(){ 

     }, 
     toggleCheckFriend:function(){ 
      //destroy this View instance. 
     } 
    }); 

var cv = new CheckboxView(); 

¿Cómo destruyo la instancia? Cuando el alternar está activado, quiero que la instancia de esa vista desaparezca para siempre.¿Cómo destruyo esta instancia de Backbone.js View?

Respuesta

3

No asigne la instancia a ninguna variable (no veo ninguna necesidad ya que las vistas en la red troncal son controladas por eventos) y en su método toggleCheckFriend elimine todos los datos y eventos, lo que hace que la instancia esté disponible para la recolección de elementos no utilizados .

toggleCheckFriend:function(){ 
    $(this.el).removeData().unbind(); 

    } 
+0

interesante, ... – Sander

0

¿Tiene esa vista un modelo detrás?

Si desea que el modelo retirado (de la db), puede utilizar: this.model.destroy()

Después de eso, se puede eliminar sólo la propia vista del DOM llamando this.remove(). La documentación menciona que es el equivalente a $(this.el).remove().

Tenga en cuenta que el 'esto' se refiere a por encima de la propia vista, por lo que tendría que _.bindAll(this, 'toggleCheckFriend')

+0

No necesita _.bindAll (esto, 'toggleCheckFriend'). El contexto para las devoluciones de llamada de eventos DOM será automáticamente la vista. –

+0

@JohnnyO: Lo tengo principalmente allí para comandos de tuberías. En caso de que haya elementos que puedan desencadenarlo además del usuario que lo desencadena directamente. (es decir, la página tiene un CheckAllCheckBox) – rkw

6

Mi respuesta a una pregunta similar se recibió bien, y ha funcionado bien para mí. He aquí un vistazo a mi función destroy_view

Respuesta (orig pregunta https://stackoverflow.com/a/11534056/986832.):

que tenía que estar absolutamente seguro de que la vista no se acaba de quitar de DOM sino también completamente unido de eventos.

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); 

    } 

Me pareció exagerado, pero otros enfoques no funcionaron del todo.

Cuestiones relacionadas