使用Backbone.js,是否可以使路由器導航到它來自的頁面?我希望在出現彈出窗口時更改我的URL的情況下使用它,並且當我隱藏彈出窗口時,我想要將其改回。我不想簡單地返回,因爲我希望保持背景頁面的位置與我在彈出窗口之前保留的位置完全相同使用Backbone.js默默地將url更改爲以前的版本
回答
您可以通過擴展Backbone.Router
和導航過程中存儲的所有路由解決這個問題。
class MyRouter extends Backbone.Router
constructor: (options) ->
@on "all", @storeRoute
@history = []
super options
storeRoute: ->
@history.push Backbone.history.fragment
previous: ->
if @history.length > 1
@navigate @history[@history.length-2], true
然後,當你不得不解僱你的模式,只需調用MyRouter.previous()
方法,它會將您重定向到最後一個「哈希」。
您可以在彈出或覆蓋的onCloseEvent中觸發一條路徑:
router.navigate('/lasturl/');
這將設置網址。如果您傳遞true作爲第二個參數,那麼您還將執行routes操作。否則,頁面將保持不變。
當然,但問題是,我怎麼知道最後一個網址是? Backbone是否提供了一種有用的方法,或者我將不得不從window.history中獲取它? – user802232
我認爲mateusmaso的回答大多是正確的,但需要一些調整來保證你總能找到你正在尋找的正確的URL。
首先,你需要重寫的路徑方法有beforeRoute方法火:
route: (route, name, callback) =>
Backbone.Router.prototype.route.call(this, route, name, =>
@trigger('beforeRoute')
callback.apply(this, arguments)
)
然後你綁定事件並初始化歷史實例變量:
initialize: (options) ->
@history = []
@on "beforeRoute", @storeRoute
下創建的helper方法爲存儲和檢索片段:
storeRoute: =>
@history.push Backbone.history.fragment
previousFragment: =>
@history[@history.length-2]
最後,你需要一個最終的幫助器方法,可以用來更改URL而無需重新加載並存儲結果片段。在關閉彈出窗口時,您需要使用此功能,否則,如果用戶再次彈出而不在其他任何地方導航,則您的歷史記錄中不會包含期望的片段。這是因爲在沒有「trigger:true」的情況下調用導航將不會觸發事件處理程序來存儲片段。
changeAndStoreFragment: (fragment) =>
@navigate(fragment)
@storeRoute()
這個答案可能沒有解決這個問題,但它的優點大部分是相同的問題。我無法默默導航到之前的路線,或者因爲斜線後面的路線而導致自定義路線。爲了使路由功能不被觸發,請使用{trigger:false}
,或者根本不要使用觸發器,因爲false
是默認行爲,請確保您的路由以#something
開頭,而不是'#/ something'(請注意斜槓),或者更改Backbone.js(路由器部分)中的regEx。
- 1. 將Mapserver默認URL轉換爲更易於使用的版本
- 2. 如何更改默認的URL地址
- 3. 如何將PHP的默認版本從4更改爲5?
- 4. 如何將pip3的默認版本從python3.5更改爲python3.6
- 5. 如何使用NSIS腳本靜默卸載以前的版本?
- 6. 如何更改默認的python版本?
- 7. 更改Android Studio的默認sdk版本
- 8. Python如何將默認版本從python 3.5更改爲python 2.7
- 9. 將默認Python版本從2.6.6更改爲2.7,並配置django
- 10. Rails更改默認URL的
- 11. 更改默認版本Swagger位置
- 12. ISPConfig更改默認版本PHP
- 13. 如何更改默認minitest版本
- 14. 在Backbone.js中默默地改變模型屬性?
- 15. 如何更改使用的默認Rails版本?
- 16. 如何使用Selenium webdriver與Ruby更改Firefox的默認版本?
- 17. 如何更改EMACS 23使用的默認python版本?
- 18. 更改tomcats默認URL
- 19. 如何將默認的maven surefire插件更改爲更高版本?
- 20. 如何將當前版本的Ruby設爲默認
- 21. Backbone.js的 - 默認路由器,從URL
- 22. 是否可以更改本地化的默認英語語言?
- 23. Gradle是否可以使用latest.release作爲默認依賴版本?
- 24. 更改PhoneGap項目的默認URL
- 25. 如何更改ActiveAdmin的默認URL?
- 26. uiswitch默認文本更改
- 27. FTDI將PID更改爲默認值
- 28. 將mysql默認引擎更改爲innodb
- 29. CAKEPHP - 將默認路徑更改爲webroot
- 30. 將默認終端shell更改爲root
其實你可以簡單地只存儲最後的「散列」,而不是孔歷史 – mateusmaso
謝謝!正是我在找什麼。 – Felipe
我不相信這會保證在可能使用它的路由方法之前始終調用storeRoute方法。因此,歷史中存儲的內容將不一致。 – DrewB