Mootools - как исправить область переменных внутри инициализации и внутри ajax-запроса - PullRequest
0 голосов
/ 19 июля 2011

Я не могу заставить цикл for читать переменную maxSlots вне запроса. Я не знаю, как и где объявить переменную, чтобы сделать ее локальной для каждого класса, но глобальной для класса дыр.

//INITIALIZATION
initialize: function(){

    maxSlots = 0;
    var myRequest = new Request({

            url: 'getInventory.php',
            method: 'post',     
            onSuccess: function(responseText){

                maxSlots = responseText;
                console.log(maxSlots);
            },

            onSFailure: function(){
                alert('noo');
            }       

    });
    myRequest.send();

    for (var i = 1; i <= maxSlots; i++){

        var slot = new Element('div', {id: 'slot'+i, class: 'slot'});
        slot.inject(invContainer);
    }


}

EDIT: Хорошо, я попытался изменить переменную в опцию, предупреждение внутри запроса = 12, но если я сделаю предупреждение после запроса, оно говорит неопределенное ... все та же проблема.

//VARIABLES
options: {
    id: '',
    size: '',
    maxSlots: '2'
},

//INITIALIZATION
initialize: function(options){

    this.setOptions(options);
    var myRequest = new Request({

            url: 'getInventory.php',
            method: 'post',     
            onSuccess: function(responseText){

                this.maxSlots = responseText;
                alert(this.maxSlots)
            },

            onSFailure: function(){
                alert('noo');
            }       

    });
    myRequest.send();

            alert(this.maxSlots)
    for (var i = 1; i <= this.maxSlots; i++){

        var slot = new Element('div', {id: 'slot'+i, class: 'slot'});
        slot.inject(invContainer);
    }

}

1 Ответ

2 голосов
/ 19 июля 2011

попробуйте это:

   initialize: function(){

        this.maxSlots = 0;
        var myRequest = new Request({

            url: 'getInventory.php',
            method: 'post',     
            onSuccess: function(responseText){

                this.maxSlots = responseText;
                console.log(this.maxSlots);
            }.bind(this),  // <-- always bind the scope in functions

            onSFailure: function(){
                alert('noo');
            }       

    });
    myRequest.send();

    for (var i = 1; i <= this.maxSlots; i++){

        var slot = new Element('div', {id: 'slot'+i, class: 'slot'});
        slot.inject(invContainer);
    }


}

Вы также можете сохранить переменную в this.options

Удачи

...