所以我試圖做的是觸發並加載一個視圖,當有人去我的網站用我的路由找不到的URL。我這樣做是爲了讓訪問者可以通過訪問domain.com/username處理沒有標籤路由的骨幹路由
來查看用戶配置文件由於用戶名是動態的,我無法定義路由,我將如何完成我需要的觸發?
所以我試圖做的是觸發並加載一個視圖,當有人去我的網站用我的路由找不到的URL。我這樣做是爲了讓訪問者可以通過訪問domain.com/username處理沒有標籤路由的骨幹路由
來查看用戶配置文件由於用戶名是動態的,我無法定義路由,我將如何完成我需要的觸發?
您可以處理,在路由器:
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 });
你不能這樣做 - 在URL片段上的骨幹路由,而不是URL本身,所以這個路由不會觸發 – Bojangles
你是對的。我更新了代碼以從URL中刪除域。謝謝! – ricardohdz
您的代碼仍然會執行相同的操作。您可以傳遞路由器的_any_模式進行匹配,並且它只會匹配URL片段_not_路徑名 – Bojangles
你不能做到這一點與骨幹網,因爲它只是路由器在URL片段(散列),而不是URL本身。使用HTML5 History API將不起作用,因爲這是直接導航到URL。
您的唯一選擇是在服務器上進行路由,併爲其提供一個包含所有Backbone客戶端邏輯的頁面。
你可能會破解window.location.pathname
,但這不是最理想的,可能會導致比平常更多的眼淚。
我認爲你必須做一個服務器端重寫來處理這種情況。服務器應該將'domain.com/username'視爲'domain.com'(可選地,您可能需要在服務器上進行驗證,首先是用戶名實際存在)。 – McGarnagle
爲什麼你不想使用哈希?他們可以導航到domain.com/#username。 – 1nfiniti