Backbone.js路由器动态第一个参数

时间:2012-04-13 02:09:53

标签: javascript node.js backbone.js router

我目前有一个路由对象,它有几个常规页面,并且还希望添加一个顶级路由,其中​​第一个参数是用户名。

routes : {
  '/'        : 'main',
  '/login'   : 'login',
  '/about'   : 'about',
  '/create'  : 'create',
  '/:username': 'getUser' //something like this
  '*actions' : 'defaultHandler'
}
  1. 我将如何实现这一目标?
  2. 在没有找到页面或用户的情况下,添加用户名路由,同时还会回退操作会不好?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你就在那里。只需添加username作为getUser函数的参数:

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

但是有一个问题,因为你的最后两条路线都可以匹配任何东西。为了识别用户,您可以使用前缀来区分用户路由与最终splat匹配的所有内容。这样的事情就足够了:

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

答案 1 :(得分:1)

当您的用户名为" about"或"创建"?命名空间您的路由并避免问题:

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

然后你必须确保没有人拥有" a"作为用户名。如果添加更多路径,此方法还可以保护您免受未来冲突的影响。