骨干网.js路由器动态第一参数

Backbone.js Router dynamic first parameter

本文关键字:参数 动态 js 路由器 骨干网      更新时间:2023-09-26

我目前有一个具有多个常规页面的路由对象,并且还想添加一个顶级路由,其中第一个参数是用户名。

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

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

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

然后,您只需要确保没有人将"a"作为用户名即可。此方法还可以在添加更多路由时保护您免受将来冲突的影响。

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

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

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

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