2012-04-13 26 views
0

我目前有一個路由對象有幾個常規頁面,並且還想添加一個頂級路由,其中​​第一個參數是用戶名。Backbone.js路由器動態第一個參數

routes : { 
    '/'  : 'main', 
    '/login' : 'login', 
    '/about' : 'about', 
    '/create' : 'create', 
    '/:username': 'getUser' //something like this 
    '*actions' : 'defaultHandler' 
} 
  1. 如何將我做到這一點?
  2. 如果在找不到頁面或用戶時添加用戶名路由,同時又回退操作,會不會是錯誤的設計?

回答

1

當你有一個用戶叫做「about」或「create」時會發生什麼?命名空間你的路線,並避免問題:

routes : { 
    '/'   : 'main', 
    '/a/login' : 'login', // "a" for "application" 
    '/a/about' : 'about', 
    '/a/create' : 'create', 
    '/a/*actions': 'defaultHandler', 
    '/:username' : 'getUser' 
} 

然後,你只需要確保沒有人有「a」作爲用戶名。如果添加更多路線,這種方法還可以保護您免受未來衝突的影響。

1

如果我正確理解你,你就在那裏。只需添加username爲您getUser函數的參數:

getUser: function(username) { /* do stuff */ } 

還有一個問題,不過,因爲你的最後兩條航線都可以匹配任何事情。爲了識別用戶,您可以使用前綴來區分用戶路線和最終圖示匹配的所有內容。像這樣的東西應該就足夠了:

routes : { 
    // ... 
    '/users/:username': 'getUser' 
}