【问题标题】:Backbone router events - always two events per route?骨干路由器事件 - 每条路由总是两个事件?
【发布时间】:2015-07-14 00:09:02
【问题描述】:

我正在使用更新的 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

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

这里有一些证据:

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    因为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 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 2012-06-26
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多