LINUX.ORG.RU

[js] Передача ссылки на объект


0

1

Использую jQuery для ajax-запросов. Т.к. хотелось бы применить ОО-подход, в качестве дополнительных аргументов передаю ссылку на объект (parent: this); но вот незадача, в колбэк функции попадает клонированный объект.

function Check() {
    this.setStatus('e1');
    this.setStatusMessage('error');
}

Check.prototype.setStatus = function(status) {
    this.status = status;
}

Check.prototype.getStatus = function() {
    return this.status;
}

Check.prototype.setStatusMessage = function(message) {
    this.statusMessage = message;
}

Check.prototype.getStatusMessage = function() {
    return this.statusMessage;
}

Check.prototype.setSuccessCallback = function(callback) {
    this.successCallback = callback;
}

Check.prototype.check = function() {
    this.setStatus('e2');
    this.setStatusMessage("Wait...");
    return $.ajax({
        url: "/ajax/check_balance.php",
        type: "GET",
        dataType: "json",
        cache: false,
        parent: this,
        success: function(json){
            this.parent.setStatusMessage("Success");
            this.parent.setStatus(0);
            return this.parent.successCallback();
        }
    });
}

var cb1 = new Check();
cb1.setSuccessCallback(function(){
    alert("Test1: " + cb1.getStatus()); // Test1: 0
});
cb1.check();
alert("Test2: " + cb1.getStatus()); // Test2: e2
★★

Сори, надо было в web-development :)

SaBo ★★ ()

Сам jQuery не использую, но наверное, что бы работало так, как хотите вы, должно быть так:

Check.prototype.check = function() {
    this.setStatus('e2');
    this.setStatusMessage("Wait...");
    return $.ajax({
        url: "/ajax/check_balance.php",
        type: "GET",
        dataType: "json",
        cache: false,
        async: false,
        context: this,
        success: function(json){
            this.setStatusMessage("Success");
            this.setStatus(0);
            return this.successCallback();
        }
    });
}
обратите внимание на параметры context: this и async: false

nozh ()
Ответ на: комментарий от nozh

обратите внимание на параметры context: this и async: false

Я идиот :) Спасибо! :)

SaBo ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.