2013-12-23 36 views
8

我使用這種方法導航到url,觸發一個事件,而不是將url推送到瀏覽器歷史記錄。但Backbone.history.navigate(url,{trigger:true, replace: true})從歷史記錄中取代之前的網址。 例如:瀏覽器hystoryBackbone.history.navigate(url,{trigger:true,replace:true})

之前

localhost:port/url

Backbone.history.navigate(url + '/list',{ trigger:true, replace: true })

預計:觸發事件,但瀏覽器歷史記錄localhost:port/#url/list:在路線url + '/list'和瀏覽器歷史記錄localhost:port/url 實際上觸發事件。 先前的網址被替換

+2

問題是URL中的'#'?這個問題不是很清楚。 – fearphage

+1

看起來下面的答案應該被接受爲正確的答案,請注意,你似乎誤解了替換的含義---它取代了_history_中的條目(地址欄總是在導航中更改)...但導航不是更新您的應用程序的唯一方法! – Corin

回答

13

這就是我想你問,請糾正我,如果我錯了:

「我如何引發骨幹路由,而無需更新網址是什麼?」

快速解答

你不能。 取代選項也不會幫助你。以下是文檔中的一段代碼:

要在不在瀏覽器歷史記錄中創建條目的情況下更新URL,請將replace選項設置爲true。

正如你所看到的,替換不會影響對URL的更新。

隨後回答

如果你不想要的網址更新,這讓我覺得,顯示在您的應用程序列表是的主要更新您的應用程序狀態。如果這是真的,那麼根據我的經驗,您不應該使用對象來管理它。

如果您直接調用此功能(例如通過函數)或間接調用(例如通過調度事件),則您的應用程序將更新,而您的url不會。

我喜歡Derick Baily's Post關於如何設置您的路由器結構。這有點冗長,但值得一讀。

此外,檢查出David Sulc's repo爲「溫柔的介紹木偶」。我知道這是使用Marionette.AppRouter的對象,但校長仍然健全。 Check out this file爲例。

作爲一個方面說明,如果#是問題; check out this SO answer。但請注意,hashChange選項主要用於x瀏覽器兼容性according to the docs