Javascript 主干.js路由器中的严格参数匹配

Javascript 主干.js路由器中的严格参数匹配,javascript,backbone.js,backbone-routing,Javascript,Backbone.js,Backbone Routing,我已将路由器定义为: var MyRouter = Backbone.Router.extend({ routes: { // catch-all for undefined routes "*notfound" : "notFound", }, initialize: function(options) { this.route("my_resource/clear_filters", 'clearFilters'); this.route("my

我已将路由器定义为:

var MyRouter = Backbone.Router.extend({
  routes: {
    // catch-all for undefined routes
    "*notfound" : "notFound",
  },

  initialize: function(options) {
    this.route("my_resource/clear_filters", 'clearFilters');
    this.route("my_resource/:id", 'show');
  },

  show: function(id){
    console.log('show', id);
  },

  clearFilters: function() {
    console.log('clearFilters');
  },

  notFound: function() {
    console.log('notFound');
  },
});

var app = {};
app.MyRouter = new MyRouter();
Backbone.history.start({silent: true});
因此,以下URL将映射为:

var opts = {trigger: true};
app.MyRouter.navigate('/foo', opts);                       // logged -> 'notFound'
app.MyRouter.navigate('/my_resource/123', opts);           // logged -> 'show', '123'
app.MyRouter.navigate('/my_resource/clear_filters', opts); // logged -> 'clearFilters'
app.MyRouter.navigate('/my_resource/some_thing', opts);    // logged -> 'show', 'some_thing'
如何限制
my\u resource/:id
路由仅匹配数值参数,以便
app.MyRouter.navigate(“/my\u resource/some\u thing”)
notFound

从以下位置处理:

路由
路由器。路由(路由,名称,[回调])


手动为路由器创建路由,
route
参数可以是路由字符串或正则表达式。路由或正则表达式中的每个匹配捕获都将作为参数传递给回调

所以你可以说:

this.route(/my_resource\/(\d+)/, 'show')

如果您需要比主干字符串模式更细粒度地控制路由,请在路由器的
中初始化

是的,我知道路由可以使用正则表达式,但据我所知,您可以使用正则表达式或命名参数-您不能使用命名正则表达式-因此无法将匹配的正则表达式传递给回调函数。“路由或正则表达式中的每个匹配捕获都将作为参数传递给回调。“在将路由转换为正则表达式时,主干在内部用正则表达式组替换
:name
对象。或者,您是否正在尝试将多个路由模式发送到同一个路由处理程序,并且您想知道在处理程序内部触发的是哪条路由?“主干在内部将路由转换为正则表达式时将:name things替换为正则表达式组”明白了!那是丢失的一块。谢谢:)名称符号有点误导,因为路线参数实际上根本没有命名,它们都是位置参数。路由中的名称实际上仅用于文档目的。