Mootools вызывающий метод класса onSuccess Ajax - PullRequest
0 голосов
/ 11 апреля 2011

Я пытаюсь добиться следующего:

  1. Пользователь нажимает на элемент и вызывается функция cmove (работает)
  2. cmove передает объект JS методу ajax (работает)
  3. Метод ajax отправляет объект в контроллер перемещения / тестирования (PHP / CodeIgniter) (работает)
  4. контроллер возвращает некоторые данные JSON (работает)
  5. onSucces вызывает метод move, чтобы сделать что-то (нет шансов вызвать этот метод)

Итак, как я могу вызвать метод move из onSuccess? И есть ли лучший способ протолкнуть moveObj?

var Plane = new Class({
    Implements: Options,

    options: {
        action: null
    },

    initialize: function(options) {
        this.setOptions(options);
        $('somelement').addEvent('click', this.cmove.bind(this));
    },


    cmove: function(event, action) {

        moveObj = new Object();
        moveObj.x = 123;            

        this.ajax('cmove', moveObj);

    },
    move: function(moveObj) {
        console.log("Yippe!");  // not getting here :(              
    },      

    ajax: function(action, obj) {

        resp = $('resp');

        var myRequest = new Request.JSON({
            url: '<?php echo site_url('move/test'); ?>',
            method: 'get',
            onRequest: function(){
                resp.set('text', 'wait...');
            },

            onSuccess: function(responseText){

                switch(action)
                {
                case 'cmove':

                    test3.move(responseText); // not working
                    this.move(responseText);  // not working
                    parent.move(responseText);  // not working

                    resp.set('text', responseText.x);
                    break;              


            },
            onFailure: function(){
                resp.set('text', 'Sorry, your request failed :(');
            }
        }).send('coords='+ JSON.encode(obj));           

    }

});


window.addEvent('domready', function(){
    var test3= new Plane({});
});

1 Ответ

4 голосов
/ 12 апреля 2011

вам нужно привязать функцию обратного вызова для экземпляра Request к области видимости вашего класса или сохранить ссылку на экземпляр вашего класса (self = this) и вызвать вместо этого вызов:

ajax: function(action, obj) {

    var self = this; // save a refrence
    var resp = document.id("resp");

    new Request.JSON({
        url: '<?php echo site_url('move/test'); ?>',
        method: 'get',
        onRequest: function(){
            resp.set('text', 'wait...');
        },

        onSuccess: function(responseText){

            switch(action) {
                case 'cmove':

                    self.move(responseText); // will work
                    this.move(responseText);  // will also work

                break;              
            }

        }.bind(this), // binding callback to instance so this.method works
        onFailure: function(){
            resp.set('text', 'Sorry, your request failed :(');
        }
    }).send('coords='+ JSON.encode(obj));           

}
...