我在以下代码中遇到了非常有趣的问题:
这是有效的(在proxyLoginSuccess中会出现错误,因为我认为它会脱离上下文):
this.model.save()
.done(this.proxyLoginSuccess)
但这不是
this.model.save()
.done(function() {
this.proxyLoginSuccess();
})
proxyLoginSuccess是:
this.proxyLoginSuccess = options.loginSuccess;
我这里有上下文问题,不确定如何解决这个问题,欣赏任何线索?
答案 0 :(得分:4)
您可以使用下划线指定运行函数的上下文
this.model.save()
.done(_.bind(function() {
this.proxyLoginSuccess();
}, this));
或者使用jQuery,
this.model.save()
.done(Backbone.$.proxy(function() {
this.proxyLoginSuccess();
}, this));
或者通过保留对本地范围的引用,
var self = this;
this.model.save()
.done(function() {
self.proxyLoginSuccess();
});
或原生(MDN Polyfill for older browsers),
this.model.save()
.done(function() {
this.proxyLoginSuccess();
}.bind(this));
可能有更多方法,但我更喜欢第一种选择。