在下面的代码中,我调用的是loadAuthorsList函数,然后将其信息传递给loadTemplate函数。但是,我被萤火虫告知,这就是“冥想”。不是一个功能。为什么以及如何解决?
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);
}
});
}
};
答案 0 :(得分:2)
因为成功回调this
指向另一个对象(XHR)。您可以使用Function.prototype.bind
显式绑定上下文,例如:
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 context
设置为AJAX回调提供上下文:
context: this,
success: function (data) {
this.loadTemplate('AuthorTemplate', '#author_records', data)
},