我正在扩展骨干网中的路由器 -
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%肯定这个代码的'为什么'。
答案 0 :(得分:1)
由于您将_proxy_callback
函数包装在另一个函数中,因此范围会更改为该函数的上下文。您需要bind
_proxy_callback
到Router
:
handler.callback = _(handler.callback).wrap(_.bind(this._proxy_callback, this));
这会将上下文保留在您想要的位置。 Bind确保this
与传入的{{1}}相同。