Un this qui pointe plus où il faut?

Un this qui pointe plus où il faut? - HTML/CSS - Programmation

Marsh Posté le 30-09-2008 à 04:45:04    

Bonjour,
 
Avant de commencer :
1. J'ai de bonnes bases en Java Script
2. Sauf que la POO en JS je débute
3. Mon code vaut ce qu'il vaut, je suis ouvert aux remarques (constructives?)
4. J'utilise Mootools pour de multiple raisons, et pas seulement pour lire mon fichier XML
 
Voici mon problème :
J'essaie donc de lire et parser un fichier XML pour créé quelque objets. En fait, la communication entre mon interface d'admin et mon appli js repose sur un fichier XML que je charge lors de l'initialisation de cette appli. J'utilise pour cela Mootools et un objet de mon cru (c'est ce qui coince bien sûr) :

Code :
  1. function MyObject
  2. {
  3.  var models;
  4.  
  5.  this.init = function()
  6.  {
  7.    this.loadXML();
  8.  }
  9.  
  10.  this.loadXML = function()
  11.  {
  12.     // Chargement du fichier xml
  13.     var xmlRequest = new Request({
  14.       url : 'content.xml',
  15.       method : 'get',
  16.       async : false
  17.     });
  18.         
  19.     // Ok, lecture XML
  20.     xmlRequest.onSuccess = this.parseXML;
  21.         
  22.    // Envoit de la requête
  23.    xmlRequest.send();
  24.  }
  25.  
  26.  this.parseXML(responseTxt , responseXML)
  27.  {
  28.    // OSEF de ce qui se passe exactement
  29.    // pour simplifier je fais des choses de ce genre
  30.    this.models = new Array();
  31.    var i = new Object();
  32.    this.models.push(i);
  33.  }
  34. }
  35. // On lance le bouzin
  36. window.addEvent('domready',function () {
  37.  var app = new MyObject();
  38.  app.init();
  39. });

Ma méthode parseXML() est bien exécutée (vérifié à coup de alert()). Le problème c'est que lorsque je fait appel à une autre méthode par la suite, j'ai une erreur qui me dit que this.models est indéfini. Je pense que c'est une histoire de contexte, je veux dire par là que dans le contexte où est exécuté ma méthode parseXML() le this doit pas pointer vers l'instance de ma classe et que du coup mon models initiale reste toujours dans un état non initialisé.
 
J'ai fais des recherches, testé pas mal de choses mais je vois pas du tout comment m'en sortir... Un peu d'aide?


Message édité par dwogsi le 30-09-2008 à 04:45:57

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 30-09-2008 à 04:45:04   

Reply

Marsh Posté le 30-09-2008 à 07:44:37    

Code :
  1. xmlRequest.onSuccess = this.parseXML; // <======== look at this


 
tu as collé la méthode directement sur l'objet xmlRequest, ce qui signifie que ton "this" n'est plas ton objet (celui qui possede this.parseXML), mais le this correspond à xmlRequest.
 
Pour remédier à ce problème t'es obligé de passer par une fonction anonyme.
 

Code :
  1. var self = this;
  2. xmlRequest.onSuccess = function(rT,rX) {
  3.    self.parseXML(rT,rX);
  4. };


là ton this correspondra du coup au bon objet

Reply

Marsh Posté le 30-09-2008 à 20:51:14    

Merci ça fonctionne à merveille. :)


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed