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

Javascript Backbone.js路由器动态第一个参数,javascript,node.js,backbone.js,router,Javascript,Node.js,Backbone.js,Router,我目前有一个routes对象,它有几个常规页面,还想添加一个顶级route,其中第一个参数是用户名 routes : { '/' : 'main', '/login' : 'login', '/about' : 'about', '/create' : 'create', '/:username': 'getUser' //something like this '*actions' : 'defaultHandler' } 我将如何实现这一点

我目前有一个routes对象,它有几个常规页面,还想添加一个顶级route,其中第一个参数是用户名

routes : {
  '/'        : 'main',
  '/login'   : 'login',
  '/about'   : 'about',
  '/create'  : 'create',
  '/:username': 'getUser' //something like this
  '*actions' : 'defaultHandler'
}
  • 我将如何实现这一点
  • 在没有找到页面或用户的情况下,添加用户名路由,同时又返回操作,这会是一种糟糕的设计吗

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

    getUser: function(username) { /* do stuff */ }
    
    不过,有一个问题,因为您的最后两条路线几乎可以匹配任何东西。为了识别用户,可以使用前缀将用户路由与最终splat匹配的所有路由区分开来。这样的东西应该足够了:

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

    当您有一个名为“about”或“create”的用户时会发生什么?为路由命名名称空间并避免问题:

    routes : {
      '/'          : 'main',
      '/a/login'   : 'login', // "a" for "application"
      '/a/about'   : 'about',
      '/a/create'  : 'create',
      '/a/*actions': 'defaultHandler',
      '/:username' : 'getUser'
    }
    
    然后你只需要确保没有人有“a”作为用户名。如果添加更多路由,此方法还可以防止将来发生冲突