3

我正在構建一個Backbone應用程序,並且遇到了這個奇怪的問題。在狀態A(路線:「」),我有這樣的一個觀點:在Backbone.js中使用後退按鈕後多次觸發事件

var view = Backbone.View.extend({ 
    events : { 
     "click a.continue" : "next" 
    }, 

    next : function(e) { 
     //Some stuff 
     Backbone.history.navigate("/page2"); 
    } 
}); 

,一旦我點擊與錨「繼續」類,我重定向到一個狀態B(路線:「/ page2」)。如果我點擊瀏覽器的後退按鈕,然後點擊錨點,調試我注意到下一個函數被觸發兩次。事實上,如果我繼續前進,事件觸發的次數不斷增加。

任何線索?

在此先感謝

回答

9

你有一個殭屍視圖掛在身邊。

它的要點是,當你正在實例化並顯示第二個視圖(「狀態B」)時,你並沒有處理第一個視圖。如果您將任何事件綁定到視圖的HTML或視圖的模型,則需要在關閉表單時清除這些事件。

我寫了一篇詳細的博客張貼這一點,在這裏:http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

請務必閱讀註釋爲「約翰尼·O」提供了一種替代的實現我認爲這是相當輝煌。

+0

感謝Derick,真的很好的文章。我也發現你可以簡單地做一些像$(view.el).unbind();在某些情況下。 – sebarmeli

4

我有同樣的問題,解決的辦法是......

App.Router = Backbone.Router.extend({ 
    routes: { 
     "fn1": "fn1", 
     "fn2": "fn2" 
    }, 
    stopZombies: function(objView){ 
     if(typeof objView === "object"){ 
      objView.undelegateEvents(); 
      $(objView.el).empty(); 
     } 
    }, 
    fn1: function(){ 

     this.stopZombies(this.lastView); 

     var view1 = new App.v1(); 
     this.lastView = view1; 
    }, 
    fn2: function(){ 

     this.stopZombies(this.lastView); 

     var view2 = new App.v2(); 
     this.lastView = view2; 
    } 
}); 

存放在this.lastView最後執行視圖,然後stopZoombies()從該視圖中刪除的事件。

+2

Inglés,por。 – JJJ

+0

我不知道這是哪種語言。但它解決了我的問題。謝謝你:-) +1 –

相關問題