2011-12-18 37 views
16

有沒有辦法在backbone.js中觸發相同的位置路由,例如當位置是/My/App/#/About,用戶再次點擊錨點時使用相同的路由來刷新頁面內容。觸發相同的位置路由

回答

6
Router.navigate('about', true); 

這樣你就可以手動觸發一個路由。

+3

現在過時:https://github.com/jashkenas/backbone/issues/1214 – hongymagic 2013-08-22 06:38:31

3

假設你想要的不僅僅是關於頁,使用更做到這一點:

route = Backbone.history.fragment; 
yourRouter.navigate(route, true); 
1

使用骨幹0.9.2你傳遞一個選擇對象並設定「觸發」爲「真」。

router.navigate('some/route', { trigger : true }); 

參考:http://documentcloud.github.com/backbone/#Router-navigate

+0

這不適用於重新加載當前路線。如果目標片段與當前片段匹配,則導航返回。 – DriverDan 2013-06-25 19:58:35

52
Backbone.history.loadUrl(Backbone.history.fragment); 

爲您的特定問題的解決方案是不是真的記錄,並似乎建議的最佳做法是隻調用是你想要的路線聲明的功能火:/

編號:https://github.com/documentcloud/backbone/issues/1214

到目前爲止其他的答案是正確的,但他們忘了提,如果導航到的散列與當前的散列相同,沒有任何東西會觸發。

+3

似乎它是真正允許刷新同一頁面的唯一答案,謝謝! – 2012-05-23 14:56:00

+2

我們不應該使用Backbone.history.getFragment(),所以我們沒有達到歷史的屬性?似乎更清潔我的腦海。 – Rob 2013-03-19 21:57:12

+0

getFragment()'當然是更現代的Backbone更合適的方法。但是,我會+1關於運行聲明函數的註釋,而不是試圖欺騙路由器進行更新。 – mix3d 2015-08-04 14:47:31

2

由於Backbone路由器查找要加載的URL片段中的更改,所以對我而言,工作原理是首先導航到「/」而不觸發,然後再導入到您想要使用的URL(片段)觸發。如果您願意,您可以很容易地將其構建到默認路由器行爲中。

例如

App.Routers.appRouter.navigate '/', {trigger: false} 
App.Routers.appRouter.navigate myPath, {trigger: true} 
0

感謝您的建議@eddywashere,真的很棒。我添加了一個小小的編輯器來檢查你是否在最後一個(最新的)URL上,如果是,加載這個歷史記錄。很簡單,認爲它可以幫助有同樣問題的人。

$("[data-href]").on("click", function(e) { 
    var href; 
    e.preventDefault(); 
    href = $(e.currentTarget).data("href"); 
    if ((_.last(this.history)) === href) { 
    return Backbone.history.loadUrl(_.last(this.history)); 
    } else { 
    return this.router.navigate(href, true); 
    } 
}); 
+0

小心分享此常規JavaScript而不是coffeescript? – mix3d 2015-05-05 15:48:36

+1

@ mix3d肯定。我編輯了原文。 – 2015-05-06 15:59:48

0

另一種選擇:你可以添加一個帶參數的隨機值,所以哈希將每個呼叫不同的,即使你調用同一個頁面。

-1

router.navigate(route,{trigger:false}); //更改URL但不會觸發...例如:代替路由 - '約/ 1'或'約'等

Backbone.history.loadUrl(Backbone.history.fragment); //更改的路線將在此處觸發。