2013-10-30 95 views
2

我創建了以下類:jQuery的回調和原型繼承

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); 
}); 

但我真的不喜歡它,因爲我覺得自己像一個方法應該永遠不會失去裁判給它的對象。

任何想法/建議? :)

回答

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; 
}; 
0

我剛剛發現了jQuery AJAX文檔另一個答案。 jQuery.ajax函數提供了一個context參數,它允許您指定回調上下文。例如:

$.ajax({ 
    url: "test.html", 
    context: document.body 
}).done(function() { 
    $(this).addClass("done"); 
}); 

來源:http://api.jquery.com/jQuery.ajax/