2011-12-04 18 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(); 

Örneği nasıl yok edebilirim? Geçiş etkinleştirildiğinde, bu görünümün örneğinin sonsuza kadar kaybolmasını istiyorum.Bu Backbone.js Görünümü örneğini nasıl yok edebilirim?

cevap

3

Örneği herhangi bir değişkene atamayın (omurgadaki Görünümler olaylara göre başlatıldığından beri herhangi bir gereksinim görmüyorum) ve toggleCheckFriend yönteminizde tüm verileri ve etkinlikleri kaldırın, bu da örneği çöp toplama için kullanılabilir hale getirir .

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

    } 
+0

ilginç, ... – Sander

0

Bu Görünüm'ün arkasında bir modeli var mı? Eğer (db) kaldırıldığını modeli istiyorsanız

, şunları kullanabilirsiniz: Bundan sonra this.model.destroy()

, sen this.remove() arayarak DOM sadece Görünüm kendisi kaldırabilir. Belgeleme, bunun $(this.el).remove() eşdeğeri olduğuna işaret etmektedir.

Not işte bu 'yukarıda Görünüm kendisi ifade eder, bu nedenle _.bindAll(this, 'toggleCheckFriend')

+0

_.bindAll (buna 'toggleCheckFriend') gerek yoktur. DOM olayı geri aramalarının içeriği otomatik olarak görünecektir. –

+0

@JohnnyO: Genelde orada boru komutları için var. Sadece, doğrudan tetikleyen kullanıcının yanında tetikleyebilecek elemanlar olması durumunda. (yani, sayfanın bir CheckAllCheckBox'ı var) – rkw

6

benzer bir soru için cevabım iyi aldı ve benim için iyi çalıştı etmesi gerekir. (. Orig soru https://stackoverflow.com/a/11534056/986832):

ben görünüm sadece DOM kaldırılmadı kesinlikle emin değil, aynı zamanda olaylardan tamamen ilişkisiz olması gerekiyordu İşte benim destroy_view fonksiyonu

Tepki bir bakalım.

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

    } 

Bana aşırı şekilde benziyordu, ancak diğer yaklaşımlar hile yapmıyordu.