Backbone 路由器事件 - 每条路由总是两个事件?

Backbone router events - always two events per route?

我正在使用较新的 Backbone 事件侦听机制。在我的路由器初始化方法中,它看起来像这样:

     this.listenTo(this,'all',function(route,action){
           console.log('router was invoked,  route:',route,'action:',action);
       });

在调试器中,当我在 console.log 语句上放置断点时,我得到了一些意想不到的东西。

对于每条新路线,我得到这个组合

route   action

route:x  null
route     x

所以在现实生活中看起来像:

route        action 

route:home   null
route        home


route:index null
route       index

所以我的问题是 - 为什么每条路线都会触发两个单独的事件,为什么它们会像上面那样不同?

这里有一些证据:

因为 Router.route 每个 route 操作触发两个单独的事件:

route: function(route, name, callback) {
  if (!_.isRegExp(route)) route = this._routeToRegExp(route);
  if (_.isFunction(name)) {
    callback = name;
    name = '';
  }
  if (!callback) callback = this[name];
  var router = this;
  Backbone.history.route(route, function(fragment) {
    var args = router._extractParameters(route, fragment);
    if (router.execute(callback, args, name) !== false) {
      router.trigger.apply(router, ['route:' + name].concat(args));
      router.trigger('route', name, args);
      Backbone.history.trigger('route', router, name, args);
    }
  });
  return this;
},

http://documentcloud.github.io/backbone/docs/backbone.html#section-152

第一个使用 router, ['route:' + name].concat(args) 调用实际触发器,第二个首先调用 route 事件。