Плагин Jquery и $ .ajax - PullRequest
       8

Плагин Jquery и $ .ajax

2 голосов
/ 24 октября 2011

Я пытаюсь написать плагин jQuery на основе шаблона прототипа.

Моя проблема в том, что когда я использую функцию $.ajax для загрузки XML-файла, я теряю объект this.

Например, эта работа:

Plugin.prototype = {        
        defaults: {
            message: 'Hello world!'             
        },
        init: function() {              
            this.setStyleAndOptions();
            return this;
        },
        setStyleAndOptions: function() {                
            alert("setStyleAndOptions : ");
        }
}

Но это не так, я получаю сообщение об ошибке "this.setStyleAndOptions не определено":

Plugin.prototype = {

        defaults: {
            message: 'Hello world!'
        },
        init: function() {              
            $.ajax({
                type: "GET",
                url: "param.xml",
                dataType: "xml",
                success: this.initOptions
            });                             
            return this;
        },          
        initOptions: function(dataxml) {        
            // Error occured here, I suppose "this" is not the plugin anymore
            this.setStyleAndOptions();
        },
        setStyleAndOptions: function() {                
            alert("setStyleAndOptions");
        }
}

Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 24 октября 2011

Попробуйте сохранить this в переменной:

        init: function() {
            var that = this;          
            $.ajax({
                type: "GET",
                url: "param.xml",
                dataType: "xml",
                success: that.initOptions
            });                             
            return that;
        },          
1 голос
/ 24 октября 2011

Проблема в том, что this - функция в момент ошибки.Вы можете попробовать это с помощью функции apply или call:

Plugin.prototype = {

    defaults: {
        message: 'Hello world!'
    },
    init: function() {              
        $.ajax({
            type: "GET",
            url: "param.xml",
            dataType: "xml",
            success: function(){
                this.initOptions.apply(this, arguments);
            }
        });                             
        return this;
    },          
    initOptions: function(dataxml) {
        this.setStyleAndOptions();
    },
    setStyleAndOptions: function() {                
        alert("setStyleAndOptions");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...