2012-02-29 42 views
4

我在導航/路由URL時遇到問題。舉例來說,我目前在#contact/new,並且再次請求相同的網址,那麼它不會調用相應的功能。我需要將URL更改爲例如#contact/edit,然後單擊#contact/new正在工作。從同一個URL路由URL現在是個問題?Backbone.js將不會路由到與當前URL相同的URL

+0

我沒有這種問題。你介意發佈一個示例代碼嗎? – sntran 2012-03-01 02:28:20

+0

爲什麼你需要路由到相同的網址?您可以使用事件再次觸發您想再次調用的功能。 – teggy 2012-03-01 20:03:49

+1

您可能正在尋找的答案:http://stackoverflow.com/a/10181053/126600 – zack 2013-06-20 13:14:06

回答

1

我有同樣的問題。 路由相同的網址example.com/#/new(調用相同的網址兩次)不會觸發路由。 我每個路由後更改URL創建了一個解決辦法:

var url = window.location.href; 
url = url.substring(0,url.indexOf('#')) + '#/'; 
window.location.replace(url); 

或更容易:

window.location.hash = '#/'; 

但是這種解決方案在我看來有點髒。

+0

window.location.hash ='#/';觸發路線.. – Hontoni 2014-04-29 08:31:38

1

我一直在試圖找出這個問題。我最新的嘗試是添加附加一個時間戳字段的鏈接的功能,然後調用導航功能:

var AppRouter = Backbone.Router.extend({...}); 

var app_router = new AppRouter; 

function LoadLink(Link) { 
    var Timestamp = new Date().getTime(); 
    app_router.navigate("#/" + Link + "/ts_" + Timestamp); 
} 

這種方法可以讓我有一個可以多次點擊一個鏈接,但現在我要在設置路線時考慮時間戳。它可能會在稍後回來咬我。 :(

1

我知道我遲到了,但我通過使用導航功能,解決了類似的問題

試着這麼做:

this.navigate("#contact/edit", {trigger: false, replace: true}); 

從而改變路由器認爲URL它是在以#聯繫人/編輯,而不實際調用Action

2

我最終通過調用一個無聲導航到根提前解決這個問題:

var url = window.location.pathname.substr(Backbone.history.root.length); 
this.navigate('/', { trigger: false }); 
this.navigate(url, { trigger: true }); 

請記住,這將創建一個額外的歷史記錄,但在我的情況下,這並不重要。

你也可能得到這個沒有改變Backbone.history對象的fragment財產的歷史記錄條目工作,但這個屬性應該是私有的,所以用它鬼混:)

之前,我會三思而後行fragment屬性用於將當前URL與傳遞給navigate函數的URL進行匹配,因此如果它們不匹配,則會執行路由。

相關問題