2013-05-16 96 views
0

所以我試圖做的是觸發並加載一個視圖,當有人去我的網站用我的路由找不到的URL。我這樣做是爲了讓訪問者可以通過訪問domain.com/username處理沒有標籤路由的骨幹路由

來查看用戶配置文件由於用戶名是動態的,我無法定義路由,我將如何完成我需要的觸發?

+0

我認爲你必須做一個服務器端重寫來處理這種情況。服務器應該將'domain.com/username'視爲'domain.com'(可選地,您可能需要在服務器上進行驗證,首先是用戶名實際存在)。 – McGarnagle

+1

爲什麼你不想使用哈希?他們可以導航到domain.com/#username。 – 1nfiniti

回答

1

您可以處理,在路由器:

var myRouter = Backbone.Router.extend({ 
     routes: { 
      '/:username': findUsername, 
      '*path': notFound 
     } 
     findUsername: function(usernme) { 
      //Find username 
      //Username param comes from URL 
     }, 
     notFound: function() { 
      //Handle not found page 
     } 
    }); 

的一個需要注意的是,當你的應用程序加載時,您需要啓動骨幹歷史與{ pushState: true }

new myRouter(); 
Backbone.history.start({ pushState: true }); 
+0

你不能這樣做 - 在URL片段上的骨幹路由,而不是URL本身,所以這個路由不會觸發 – Bojangles

+0

你是對的。我更新了代碼以從URL中刪除域。謝謝! – ricardohdz

+0

您的代碼仍然會執行相同的操作。您可以傳遞路由器的_any_模式進行匹配,並且它只會匹配URL片段_not_路徑名 – Bojangles

0

你不能做到這一點與骨幹網,因爲它只是路由器在URL片段(散列),而不是URL本身。使用HTML5 History API將不起作用,因爲這是直接導航到URL。

您的唯一選擇是在服務器上進行路由,併爲其提供一個包含所有Backbone客戶端邏輯的頁面。

你可能會破解window.location.pathname,但這不是最理想的,可能會導致比平常更多的眼淚。