JavaScript ООП с JQuery - PullRequest
       5

JavaScript ООП с JQuery

1 голос
/ 11 марта 2012

У меня есть объект myObject, внутри у меня есть функция execute(), внутри у меня есть $.ajax({ с complete: function(xmlHttp){. Внутри этой функции я хочу вызвать setResult, который определен в myObject. Как это сделать?

function myObject() {
    this.setResult = setResult;
    function setResult(result) {
        this.result = result;   
    }

    function execute() {
         $.ajax({
            complete: function(xmlHttp){
                (?) setResult(jQuery.parseJSON(xmlHttp.responseText));
            }
        });
    }

Ответы [ 2 ]

6 голосов
/ 11 марта 2012

Стандартный способ сделать ООП - это использовать myObject в качестве конструктора и расширить его prototype объект тем, что должно быть унаследовано.

function myObject() {
    // constructor function
}

myObject.prototype.setResult = function (result) {
    this.result = result;   
}

myObject.prototype.execute = function() {
     $.ajax({
        context: this, // bind the calling context of the callback to "this"
        complete: function(xmlHttp){
            this.setResult(jQuery.parseJSON(xmlHttp.responseText));
        }
    });
}

var obj = new myObject();
obj.execute();

Нет требования , чтобы это было сделано таким образом, но это очень распространено.

Вы должны иметь в виду, что контекст вызова функции зависит от того, как вызывается эта функция. Что касается обратного вызова complete:, jQuery устанавливает контекст, поэтому он не будет вашим объектом, если вы не скажете jQuery сделать его этим объектом или не будете использовать другой способ привязки контекста .

Метод jQuery $.ajax дает вам свойство context:, которое позволяет вам устанавливать контекст вызова обратных вызовов, как я показал выше.

2 голосов
/ 11 марта 2012
function myObject() {
    var that = this; // Reference to this stored in "that"
    this.setResult = setResult;

    function setResult(result) {
        this.result = result;   
    };

    function execute() {
         $.ajax({
            complete: function(xmlHttp){
                that.setResult(jQuery.parseJSON(xmlHttp.responseText));
        }
    });
}

Также вы можете проверить прокси jquery и / или привязать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...