Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery对象在其内部调用函数_Javascript_Jquery - Fatal编程技术网

Javascript jquery对象在其内部调用函数

Javascript jquery对象在其内部调用函数,javascript,jquery,Javascript,Jquery,在下面的代码中,我调用了loadAuthorsList函数,该函数应将其信息传递给loadTemplate函数。但firebug告诉我,“this.loadTemplate”不是一个函数。为什么以及如何修复它 var LI = { sFI: x, loadAuthorsList: function () { myApp.showPleaseWait(); //for later $('#recor

在下面的代码中,我调用了loadAuthorsList函数,该函数应将其信息传递给loadTemplate函数。但firebug告诉我,“this.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);
                }
            });
        }
    };

因为在成功回调
中,这个
指向另一个对象(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。本页将向您介绍它以及JavaScript
function.prototype.bind
不支持的函数调用的复杂性IE8@RaulFernandez-这就是为什么
self
是常见的惯例。但是,根据您需要支持的环境,
bind
也很好。您不在对象上下文中。您可以改用
LI.loadTemplate