骨干网.js路由器的严格参数匹配

Strict parameter matching in backbone.js router

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

我有一个路由器定义如下:

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

来自精细手册:

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

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

所以你总是可以这样说:

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

在路由器的initialize如果您需要对路由进行比 Backbone 的字符串模式更精细的控制。