2011-04-11 6 views
0

Je suis en train de réaliser les objectifs suivants:Mootools appel méthode de classe onSuccess Ajax

  1. utilisateur clique sur un élément et la fonction CDéplacez est invoquée (travaux)
  2. CDéplacez passe un objet JS à la méthode ajax (travaux)
  3. méthode ajax soumet l'objet à déplacer/contrôleur de test (PHP/CodeIgniter) (travaux)
  4. contrôleur renvoie des données JSON (travaux)
  5. onSucces appelle la méthode de déplacement pour faire des choses (pas chance appeler cette méthode)

Alors, comment puis-je appeler la méthode move sur onSuccess? Et y a-t-il une meilleure façon de pousser le 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({}); 
}); 

Répondre

4

vous devez lier la fonction de rappel pour l'instance de demande à la portée de votre classe ou d'enregistrer une référence de votre classe instance (self = this) et appelez via qu'au lieu:

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));   

} 
+0

completly oublié cette. Merci! – Mike

Questions connexes