2012-04-13 53 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' 
}