2012-03-01 101 views
2

我需要在Backbone.js視圖被刪除時觸發一個函數。我想像一個解構造器。下面的代碼是我寫的一個片段;我知道這是行不通的。不過,我記得過去看過一個關於如何編寫這個功能的視頻教程。我需要運行一個去構造函數的原因是在視圖被移除時清除視圖內設置的時間間隔。Backbone.js在.remove上觸發事件()

 
ViewWeather = Backbone.View.extend({ 
     interval: setInterval(function() {console.log('interval fire');}, 1000), 

     // made up function 
     deconstructor: function() { 
      // if the view is removed 
      clearInterval(this.interval); 

    } 
}); 

var viewweather = new ViewWeather(); 

回答

8

本博客文章應該給你一些更好的信息

http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

最顯着的部分

Backbone.View.prototype.close = function(){ 
    this.remove(); 
    this.unbind(); 
    if (this.onClose){ 
    this.onClose(); 
    } 
} 

然後

MyView = Backbone.View.extend({ 
    initialize: function(){ 
    this.model.bind("change", this.render, this); 
    }, 
    render: function(){ ... }, 

    onClose: function(){ 
    this.model.unbind("change", this.render); 
    } 

}); 
+1

我愛你。非常感謝這段代碼。 – kr1zmo 2012-03-01 20:34:54

+1

我實際上是在研究骨幹的開發版本,並在視圖上編輯了刪除功能。也許我應該在github上創建一個分支。大聲笑,現在當一個視圖被刪除,uninitialize運行清理。所以就像你爲視圖添加初始化一樣,你也可以添加uninitialize。真棒東西那裏兄弟! remove:function(){ this。$ el.remove(); if(this.uninitialize){this.uninitialize(); } return this; } – kr1zmo 2012-03-01 20:55:22

+0

當你調用this.remove()時會自動調用this.undelegateEvents()。它會刪除委託事件嗎? (該類的散列中的事件) – ccsakuweb 2012-06-22 09:08:23

4

我不知道如果我理解正確的,但你是顯示的辦法似乎是正確的:

dispose: function(id) { 
    clearInterval(this.interval); 
    this.remove(); 
} 

你將不得不調用dispose自己,通過例如事件:意見後

initialize: function(opts) { 
    router.bind('route:leave', this.dispose, this); 
}, 

編輯:這應該工作超負荷remove

remove: function() { 
    clearInterval(this.interval); 
    Backbone.View.prototype.remove.call(this); 
} 
+0

我說的破壞或刪除視圖時運行的功能。這是檢測路線改變時,但感謝您的幫助。 – kr1zmo 2012-03-01 09:05:30

+0

你可以重載'remove()' – mindandmedia 2012-03-01 09:28:38