我创建了以下类:
APP.core.View = function () {
var self = this;
$.ajax ( { url: 'test.html' } ).done ( self.build );
return self;
};
APP.core.View.prototype.build = function ( source ) {
var self = this;
// this refers to the AJAX callback.
return self;
};
正如您在build
方法中看到的那样,this
(属于APP.core.View的那个)的引用已丢失。我怎样才能找回来?我知道我可以在AJAX回调中将引用传递给this
,如下所示:
$.ajax ( { url: 'test.html' } ).done ( function ( source ) {
self.build ( source, self );
} );
但我真的不喜欢它,因为我觉得一个方法永远不应该将ref放在它的对象上。
有什么想法/建议吗? :)
答案 0 :(得分:2)
您可以使用$.proxy()创建跨平台解决方案
APP.core.View = function () {
$.ajax({
url: 'test.html'
}).done($.proxy(this.build, this));
return this;
};
对于现代浏览器,您可以使用.bind()
APP.core.View = function () {
$.ajax({
url: 'test.html'
}).done(this.build.bind(this));
return this;
};
答案 1 :(得分:0)
我刚刚在jQuery AJAX文档中找到了另一个答案。 jQuery.ajax函数提供了一个context
参数,允许您指定回调上下文。示例:
$.ajax({
url: "test.html",
context: document.body
}).done(function() {
$( this ).addClass( "done" );
});