jquery对象调用自身内部的函数

时间:2015-06-11 15:46:19

标签: javascript jquery

在下面的代码中,我调用的是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);
                }
            });
        }
    };

1 个答案:

答案 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)
},