0

我想調用當前視圖的功能deleteMarker,點擊瀏覽器的後退按鈕。我搜索了類似的問題,但沒有人能幫助我。骨幹:點擊瀏覽器後退按鈕時調用視圖的功能

目前認爲我想調用函數deleteMarker後退按鈕被點擊時:

ev.views.Evento = Backbone.View.extend({ 
    map: 'null', 
    initialize: function(id){ 
     ..... 
    }, 
    // function that will call 
    deleteMarker: function(){ 
     this.marker.remove(); 
    },  
    render: function(id){ 
     ..... 
    } 

}); 

app.js

var ev = new Application(); 

ev.Router = Backbone.Router.extend({ 

    routes: { 
     "": "home", 
     "evento/:id" : "evento" 
    }, 
    home: function(){ 
     setTimeout(function(){ 
      $('#rightcolumn').html(new ev.views.Home_Eventos(ev.shell.map).el); 
     }, 0); 

    }, 
    evento: function(id){ 
     $('#rightcolumn').html(new ev.views.Evento(id).el);  
    } 
}); 

$(document).on('ready', function() { 
    ev.templateLoader.load(['shell', 'home_list_eventos', 'evento'], function() { 
     ev.shell = new ev.views.Shell({el: "#shell"}); 
     ev.router = new ev.Router(); 
     Backbone.history.start(); 
    }); 
}); 
+0

在ev.Router.home中,爲什麼要用毫秒參數0調用'setTimeout'?在我看來,這打破了'setTimeout'的觀點。 – 76484

+0

我搜索了一下這個模式的一些有趣的討論:http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-useful – 76484

+0

http://stackoverflow.com/questions/14543245/browser-後退按鈕處理http://stackoverflow.com/questions/25806608/how-to-detect-browser-back-button-event-cross-browser只需在'Router'中監聽事件並觸發Backbone事件,該觀點可能正在傾聽做它的工作。 –

回答

0

我發現這個解決方案在這裏工作:Backbone.js history 'on route change' event。這裏是我的解決方案:

ev.router.on("route", function(route, params) { 
    if(route == "home"){ 
     console.log("Different Page: " + route); 
     that.deleteMarker(); 
    } 

}); 

當我按下瀏覽器的後退按鈕,它會檢查路線是否在家。如果是,然後發射功能或任何你想要的。我希望這將在未來幫助你。

+0

您可以通過刪除「if」控件並訂閱「route:home」事件來使其更漂亮。 – 76484

0

我會用.onpopstate過濾功能的情況下,檢查是history.back ()已被觸發。 我不確定將什麼對象傳遞給回調函數,因此請檢查「事件」結構過濾器是否充分。

window.onpopstate = function(event) { 
    if(event == "Backbone.history.back()") triggersomething(); 
}; 

讓我知道它是否有效。希望能幫助到你。

+0

抱歉,您的解決方案在我的情況下無效。感謝您的支持。 – seal

相關問題