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

如何銷燬實例?當激活切換時,我希望該視圖的實例永久消失。如何銷燬這個Backbone.js視圖實例?

回答

3

不要將實例分配給任何變量(因爲骨幹中的視圖是由事件驅動的,所以我沒有看到任何需要),並且在您的toggleCheckFriend方法中刪除所有數據和事件,這些數據和事件使實例可用於垃圾回收。

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

    } 
+0

有意思,... – Sander

0

那個視圖有它背後的模型嗎?

如果你想刪除的模型(從DB),你可以使用:this.model.destroy()

之後,您可以通過調用this.remove()從DOM只刪除視圖本身。文件提到它相當於$(this.el).remove()

注意「這個」以上爲視圖本身,所以你必須_.bindAll(this, 'toggleCheckFriend')

+0

你不需要_.bindAll(這個'toggleCheckFriend')。 DOM事件回調的上下文將自動成爲視圖。 –

+0

@JohnnyO:我主要在那裏爲管道命令。以防萬一有用戶可以觸發它,除了用戶直接觸發它。 (即該頁面有一個CheckAllCheckBox) – rkw

6

我對類似的問題的答案已收到良好,並已工作很適合我。下面就來看看我的destroy_view功能

響應(原稿問題https://stackoverflow.com/a/11534056/986832):

我必須絕對肯定的觀點不只是從DOM中刪除,但也從事件完全綁定。

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

    } 

對我來說看起來像過度殺傷力,但其他方法並沒有完全做到這一點。