范围,在回调中丢失对对象的引用

时间:2013-12-06 11:42:28

标签: javascript backbone.js scope

我正在扩展骨干网中的路由器 -

Zoo.Router = Backbone.Router.extend({
    route: function (route, name, callback) {
      this._super(route, name, callback); //https://github.com/lukasolson/Backbone-Super
      var handler = Backbone.history.handlers[0]
      handler.callback = _(handler.callback).wrap(this._proxy_callback)
      return this
    },
    _proxy_callback: function(ev, foo){
      var args;
      args = [].slice.call(arguments, 1);
      this.trigger('before:route'); // Exception: Object #<Object> has no method 'trigger' 
      arguments[0].apply(this, args);
      return this.trigger('after:route');
    }
})

一旦命中了proxy_callback,我就无法调用this.trigger,因为我已经丢失了对该对象的引用。我该如何解决这个问题?

仅供参考 - 我正在尝试用普通的js重写一个咖啡脚本应用程序。我不是100%肯定这个代码的'为什么'。

1 个答案:

答案 0 :(得分:1)

由于您将_proxy_callback函数包装在另一个函数中,因此范围会更改为该函数的上下文。您需要bind _proxy_callbackRouter

handler.callback = _(handler.callback).wrap(_.bind(this._proxy_callback, this));

这会将上下文保留在您想要的位置。 Bind确保this与传入的{{1}}相同。