2012-07-06 27 views
6

我有一個模式彈出窗口,打開時會更改URL。當用戶關閉彈出窗口時,我想回到上一個URL,但我不想觸發與該URL關聯的路由,因爲這會重新加載我的集合並呈現視圖等。是否有方法在不觸發的情況下調用window.history.back()這條路線,還是有這樣的骨幹相當?使用Backbone.history返回而不觸發路由功能

我能想到的唯一解決辦法是保存以前的路線,那麼當模式是封閉的通話

Backbone.history.navigate(route, {trigger: false, replace: true}); 

,但是這似乎是一個難以解決的問題,一個複雜的方式。

+1

我的建議(對不起,它根本不回答你的問題)是考慮如果他們在顯示彈出窗口時爲你的頁面添加書籤會發生什麼。如果他們直接返回到http://yoursite.com/#popup/route,它可能會表現異常。如果它行爲異常,那麼如果他們關閉模態對話框會發生什麼?根據我的經驗,由於這些原因,我沒有使用路由器進行模態對話。希望這是有道理的。 – timDunham 2012-07-06 18:49:28

+0

如果他們爲頁面添加書籤,然後返回到yoursite.com/#popup/route,它會將它們重定向到yoursite.com/popup/route的該彈出窗口的靜態html版本,因此沒有關閉彈出窗口的選項。 – Barny 2012-07-09 14:07:33

回答

5

在路由器中存儲歷史聽起來像是一個很好的解決方案,我找不到解決這個問題的更好方法。

這方面的一個很好的解決方案是在這裏: Silently change url to previous using Backbone.js

我會做一個小的調整,因此看起來像這樣:

class MyRouter extends Backbone.Router 

    initialize: (options) -> 
    @on "all", @storeRoute 
    @history = [] 

    storeRoute: -> 
    @history.push Backbone.history.fragment 

    previous: -> 
    if @history.length > 1 
     @navigate @history[@history.length-2], false 
    else 
     @navigate '', true 

然後,你可以調用MyRouter.previous(),和如果你是通過直接請求來到的,它會帶給你根源。

我希望它是路由器的默認功能,至少可以保留5條最後路由。