Javascript jquery对象在其内部调用函数
在下面的代码中,我调用了loadAuthorsList函数,该函数应将其信息传递给loadTemplate函数。但firebug告诉我,“this.loadTemplate”不是一个函数。为什么以及如何修复它Javascript jquery对象在其内部调用函数,javascript,jquery,Javascript,Jquery,在下面的代码中,我调用了loadAuthorsList函数,该函数应将其信息传递给loadTemplate函数。但firebug告诉我,“this.loadTemplate”不是一个函数。为什么以及如何修复它 var LI = { sFI: x, loadAuthorsList: function () { myApp.showPleaseWait(); //for later $('#recor
var LI = {
sFI: x,
loadAuthorsList: function () {
myApp.showPleaseWait();
//for later
$('#records_table').find('tr:gt(0)').remove();
jQuery.ajax({
url: this.sFI.getServiceRoot('A'),
type: 'POST',
dataType: 'json',
data: {},
beforeSend: this.sFI.setModuleHeaders,
success: function (data) {
this.loadTemplate('AuthorTemplate', '#author_records', data)
},
complete: function () {
}
});
},
loadTemplate: function (templateName, selectorName, inputData) {
var jsPath = this.serviceFrameInstructors.getServiceRoot('LearnoogleInstructors');
jQuery.ajax({
url: jsPath.slice(0, -4) + 'js/templates/' + templateName + '.html',// + intArea,
cache: false,
success: function (value) {
var personTemplate = $.templates(value);
var html = personTemplate.render(inputData);
$(selectorName).html(html);
}
});
}
};
因为在成功回调
中,这个指向另一个对象(XHR)。您可以显式绑定上下文,例如:
success: function (data) {
this.loadTemplate('AuthorTemplate', '#author_records', data)
}.bind(this),
或者更简单,您可以在变量中存储对正确上下文的引用:
var self = this;
jQuery.ajax({
url: this.sFI.getServiceRoot('A'),
type: 'POST',
dataType: 'json',
data: {},
beforeSend: this.sFI.setModuleHeaders,
success: function (data) {
self.loadTemplate('AuthorTemplate', '#author_records', data)
},
complete: function () {
}
});
或者还有一个选项:use可以使用jQuery设置为AJAX回调提供上下文:
context: this,
success: function (data) {
this.loadTemplate('AuthorTemplate', '#author_records', data)
},
这是一个很好的方法吗?@braindice-在JS中解决这个简单、常见的情况是一种惯例。@braindice我建议您使用bind。本页将向您介绍它以及JavaScriptfunction.prototype.bind不支持的函数调用的复杂性IE8@RaulFernandez-这就是为什么self
是常见的惯例。但是,根据您需要支持的环境,bind
也很好。您不在对象上下文中。您可以改用LI.loadTemplate
。