IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

[FLASH MX 2004] XML et "loaded" dans une classe AS


Sujet :

Flash

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 12
    Points : 11
    Points
    11
    Par défaut [FLASH MX 2004] XML et "loaded" dans une classe AS
    Bonjour,

    Je cherche à écrire une classe AS qui dispose de plusieurs champs. Ces champs doivent être initialiser dans le constructeur à partir d'un fichier xml.

    Je cherche donc à charger le document xml (avec la méthode load() de l'objet XML) pour initialiser mes attributs. Le problème c'est que cette méthode est asynchrone, et que je dois donc attendre au sein de mon constructeur que l'attibut "loaded" de mon objet xml est à true.

    Juste pour voir (j'ai plutôt l'habitude de coder en java ou en C) j'ai fait une petite boucle qui ne fait rien jusqu'à ce que ce "loaded" passe à true. Résultat : echec cinglant, l'animation plante.

    Ensuite, je me suis dit que j'allais définir une fonction pour l'événement "onLoad". Le problème, c'est que dans cette fonction, pour une raison que j'ignore, je ne peux pas acceder au attributs de ma classe! Donc, je ne parviens pas à les initialiser. De le même manière, je ne peux appeller aucune méthodes de ma classe à partir de cette fonction.

    En vous remerçiant par avance si vous avez des suggestions.

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Peux-tu poster un peu de code, ça sera plus facile

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    class monObjet 
    	{    
       		var monAttribut : String ; 
     
       		function monObjet(mURL : String){ 
     
         		var doc = new XML() ; 
          		doc.onLoad = function(success) { 
             		if(success)   { 
                    	monAttribut = this.childNodes[0]; 
             		} 
             		else { 
                    	trace("Load failed!"); 
             		} 
          		} 
                doc.load(mURL); 
       	  } 
    	}
    Voila en gros ce que je voudrais faire. Le problème, c'est que dans cette fonction "onload", je n'ai pas accès à "monAttibut", et le "this" (à savoir "doc" dans cette fonction) n'a pas de parent.

    Merci de te pencher sur mon problème.

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    à mon avis c'est simplement parce que tu ne parses pas correctement ton fichier XML.

    Fais ceci par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monAttribut = this.firstChild.childNodes.length;
    trace(monAttribut);
    dans le load du constructeur
    Normalement ça devrait te retourner la longueur du premier child

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    En fait, mon problème n'a pas grand chose à voir avec les XML.

    En remplaçant dans le code précédent la ligne où je remplit l'attibut par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monAttribut = "Test" ;
    Je ne récupère pas "test" dans mon attribut. C'est juste que j'ai l'impression que lorsque je suis dans cette fonction, AS ne parvient pas à trouver l'objet courant.

    Je contourne actuellement la dificulté en appellant une fonction "myloadXML" dans mon constructeur, qui prend l'élément courant comme paramètre, mais ce n'est bien évidament pas très propre.

    Merci de ton aide tout de même.

  6. #6
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Oui ok, je viens de réellement comprendre ton problème. En effet, flash n'a pas l'air de pouvoir retrouver la propriété mon attribut car le load n'a pas de parent comme tu l'avais dit!

    Je vois maintenant ce que tu veux dire, je vais essayer de voir de mon côté!

  7. #7
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Salut,

    J'ai trouvé le moyen de faire communiquer onLoad et la classe appelante:

    Il faut créer une nouvelle classe dont le code est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class XMLMember extends XML {
    	private var loadHandler:String;
    	private var parent:Object;
    	public function XMLMember(p:Object, lh:String) {
    		parent = p;
    		loadHandler = lh;
    	}
    	private function onLoad(success) {
    		parent[loadHandler](this, success);
    	}
    }
    En gros, cette classe hérite de la superclasse XML et lui dit au moment d'un onLoad que la fonction à exécuter est une fonction définie au niveau de l'appelant. Voici donc l'appelant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class myObject
    { 
    	var myXML:XML;
    	var myProp : Number ; 
     
    	public function myObject(mURL : String){ //constructor					
    		myXML = new XMLMember(this, "onLoadPerso");
    		myXML.ignoreWhite = true;
    		myXML.load(mURL);
     
    	} 
    	function onLoadPerso(Donnees){
    		myProp=this.myXML.firstChild.childNodes.length;
    	}
     
    }
    Le problème c'est qu' étant donné que onLoad est asynchrone, le code de la classe continue à s'exécuter avant que le onLoad soit terminé, donc c'est pas très pratique!

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup!

  9. #9
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 144
    Points : 2 190
    Points
    2 190
    Billets dans le blog
    3
    Par défaut
    Oui c'est clair : MERCI !

    Parce que la , je voyais plus de solution à ce problème...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SAX] Parser un XML er récupérer le résultat dans une classe
    Par Invité dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 23/12/2009, 17h37
  2. [vbnet 1.1]Inserer deux simple quote sans texte dans une db
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/03/2007, 09h51
  3. [FLASH MX 2004][XML]portée de variable
    Par marco_ dans le forum Flash
    Réponses: 8
    Dernier message: 29/04/2004, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo