backbone.js路由器中的严格参数匹配

时间:2013-09-24 19:42:23

标签: 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_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});

因此,以下网址将映射为:

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

1 个答案:

答案 0 :(得分:2)

来自fine manual

  

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

     

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

所以你总能说出这样的话:

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

在路由器的initialize中,如果你需要对路线进行更细粒度的控制,而不是Backbone的字符串模式给你。