2013-07-16 40 views
1

好吧我已經谷歌搜索和谷歌搜索,並找不到任何與我的實際問題有關。Backbone.js路由器歷史回到初始頁面

基本上我有一個簡單的路由器定義了幾條路由,如果直接調用,所有這些路由都可以直接由服務器呈現。

所以骨幹歷史就是這樣調用的。

Backbone.history.start({ 
    'pushState': true, 
    'silent': true 
}); 

然後我有簡單的一個非常簡單的導航

this.navigate($(event.currentTarget).attr('href'), { 
    'trigger': true 
}); 

這一切工作正常,除了有一個漏洞。

假設您從網站的主頁開始,我沒有定義骨幹路由,然後單擊網站上使用骨幹路由器的幾個鏈接,您將被路由到正確的頁面和所有內容很好,但是當你點擊瀏覽器的後退按鈕回到主頁時,你會看到第一條骨幹路由的內容,而不是實際的主頁內容。

因此,我意識到我需要存儲初始頁面內容,以便在檢測到我返回到與我的路由器中的路由不匹配的初始頁面後,我可以將它們重新插入頁面,然後從我需要在我的頁面的存儲版本中重新加載。

所以我想知道這聽起來是否正確,或者如果我走錯了路,骨幹也提供任何東西來幫助這種情況,我只是失蹤?我不能成爲唯一一個試圖這樣做的人,那麼其他人如何解決這個問題呢?

(起初我以爲其實有我的代碼有問題,而不是實際上這個根本問題,所以我還是要問這個問題弄清楚其他人如何完成這一點)

+0

我正在處理這個問題,好奇你是否想出了任何解決方案。我正在考慮創建一個特殊的「刷新」路線,在這種情況下將服務器渲染它們。 –

+0

這對我來說聽起來很不錯。如果我想出更好的東西,我會讓你知道的。我目前對其進行了重新編寫,以便沒有可加載骨幹網頁的頁面首先不會使用骨幹網。這不太理想,所以我仍然在尋找更好的解決方案,但至少我可以繼續前進,稍後再回來。 – byoungb

+0

是的,我結束了客戶端渲染頁面,這是一個無賴和奇怪的問題。我想這可能與路由器的「root」有關。也許我需要每個'root'多個路由器(在我的情況下,大多數應用程序都是服務器端渲染的,但有幾個流程是客戶端,需要後退按鈕/ URL支持) –

回答

0

您需要定義路線的主頁。會發生什麼情況是,每次你點擊一個鏈接時,當前URL被推送到pushState的堆棧中,每當你點擊後退按鈕時,前一個URL就會彈出,Backbone嘗試按照它的路線。但是,當您彈出主頁網址時,沒有匹配的路線,因此Backbone實際上沒有做任何事情,從而使內容保持與路線最後一次匹配時的內容相同。

+0

對不起,我沒有清楚我的問題,但我有一堆這些網頁沒有路線,或者更重要的是我沒有一個簡單的方法來拉動骨幹處理的內容。所以我相信這是有效的,但需要我重新整理整個網站,而不僅僅是製作一個快速/ Ajax加載版本的搜索頁面。 – byoungb