2016-02-13 48 views
0

在我的Backbone應用程序(Rails後端)中,我使用[Handlebars] JavaScript模板(JST's)來渲染我的Backbone視圖。每當我在其中一個URL模板上進行瀏覽器刷新時,它會跳轉回根URL。我希望它在頁面刷新後保留在當前模板上。我想要做這樣的事情...如何在重新加載瀏覽器後保留相同的Backbone模板

getPage: function() { 
    $(window).on('beforeunload', function(){ 
    var fragment = Backbone.history.fragment; 
    }); 

    if (fragment === "this_current_template") { 
    return App.getCurrentTemplatePage(); // render it 
    } else if (fragment === "") { 
    return App.getFrontMainPage(); // render it 
    } 
} 

getPage是我的骨幹App對象的方法。我的fragment變量不能在$(window)事件處理程序之外識別。我似乎無法找到一種方法來將我以前的Backbone.history.fragment保存在一個變量中,即使我使全局變爲fragment。刷新後全部清除。我知道Backbone.history.loadUrl(Backbone.history.fragment);,但我無法讓它工作。它似乎只能在瀏覽器刷新之前工作。

這是我必須改變我的後端代碼的root路線嗎?或者有沒有辦法在頁面重新加載時使用Backbone/JS來保存當前頁面?任何幫助,將不勝感激!

+1

我想嘗試Backbone.history.navigate(yourRoute)...默認情況下應該更改瀏覽器url欄而不重新加載頁面。 – billjamesdev

+0

非常感謝。我使用'sessionStorage.setItem('fragment',fragment);'在刷新後保留片段。然後,我使用了'Backbone.history.navigate(fragment);'來確保我找到了正確的URL。 – Matt

回答

0

首先你需要創建一個路由器。據Backbone docs

var Router = Backbone.Router.extend({ 
    routes: { 
    "main": "main" 
    }, 
    main: function() { 
    // your code here 
    } 
}); 

之後,你只需要初始化Backbone.history

Backbone.history.start({}); 

之後自動骨幹將嘗試找到適合您hashbang合適的路徑,並觸發相應的動作。在給定示例中,如果您的初始hashbang將爲#main,則將執行Router.main操作。

相關問題