0

我有一个这样定义的路由器:

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_resource/:id路由限制为仅匹配数字参数以便app.MyRouter.navigate('/my_resource/some_thing')由处理notFound

4

1 回答 1

2

来自精美手册

路线 router.route(route, name, [callback])

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

所以你总是可以这样说:

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

initialize如果您需要比 Backbone 的字符串模式给您的路由更精细的控制,请在您的路由器中使用。

于 2013-09-24T20:27:04.463 回答