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

Flex Discussion :

Objets dans Array


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Par défaut Objets dans Array
    Bonjour,

    J'ai un petit problème d'ordre pratique, j'essaye de mettre des Labels dans un array flex.
    J'ai 12 labels que j'ai créé en mode "design" et en <mx:script> je créé un array qui contient toutes les instances de ces labels.
    Je fais cela parce que je vais régulièrement modifier le texte de ces 12 arrays et je voudrais pouvoir utiliser un for each, du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    var rand:int;
    for each (var letter:Label in labelArray){
    rand = Math.ceil(Math.random()*(letterArray.length-1));
    letter.text = letterArray[rand];
    }
    Je créé mon array dans le <mx:Script> comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public var labelArray:Array = new Array(letter1, letter2,........);
    Avec letter1, letter2..... les id de mes composants Flex.

    Pas d'erreurs à la compil sauf que mon tableau de Label est rempli de "null".
    Donc "impossible d'accéder à la prop d'un object nul!" etc...

    Alors ma question: est-il impossible de mettre des composants flex dans un array?
    Sinon comment puis-je fire pour que mon code ne soit pas trop lourd ?

    En effet je peux accéder à chaque label en faisant letter1.text = blabla, letter 2.text blabla

    Mais avec l'aléatoire et tout ce que je doit gérer derrière ca me parait très très lourd.

    Des idées ??

    Merci

  2. #2
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    Salut,

    Ton code ce situe ou dans la balise Script ? Je suppose qu'il n'est pas inséré dans une méthode n'est ce pas?
    A mon avis, ton tableau est instancié avant meme que tes composants Label ne soient créés, c'est pourquoi tu obtiens des instance null.

    Ecoute, par exemple, l'event creationCompelte et a ce moment initialise ton tableau

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Par défaut
    Merci pour ta réponse Jim_Nastiq
    Ton code ce situe ou dans la balise Script ? Je suppose qu'il n'est pas inséré dans une méthode n'est ce pas?
    Non, mon code est bien inséré dans une méthode j'ai assez galéré avec ca au début !

    Le code que j'ai fournit au début du post est dans une fonction fillTable() qui est appelé par la fonction init(), déclenchée par l'événement creationComplete de mon application, donc pas de soucis à ce niveaux.

    J'avoue ne pas avoir été assez précis!

    Je déduis cependant de ta réponse qu'il est possible d'ajouter des composants déclarés en mode design (tels que mx:Label) dans un tableau, non ?

    Il me semble que j'avais déjà rencontré ce genre de problèmes avec des composants auxquels j'essayais d'accéder depuis mon <mx:Script> mais je ne me rappelle plus comment j'avais fini par y accéder!

    Je crois que parfois le compilateur bug un peu, puisque certains de mes problèmes ont étés résolus en redémarrant simplement Flex Builder ou en redémarrant ou en nettoyant l'espace de travail...

    Aucune de ces solutions n' résolut mon problème ici.

    En mode debug, mon tableau est bien créé avec 12 éléments, mais ces éléments sont tous à "null" au lieu de pointer comme je l'espérais vers ces labels, afin de pouvoir ensuite accéder à la propriété text.

    Merci pour votre aide

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    Le problème ne provient pas du code de filTable mais de la déclaration de ton tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public var labelArray:Array = new Array(letter1, letter2,........);
    Ce tableau est créé lors de l'initialisation de l'instance dans lequel il est déclaré donc avant la création des Labels. C'est normal que les valeurs soient nulles.

    Je ne suis pas certain que ce tableau soit vraiment utile. Tu pourrais parcourir la liste des enfants du container par exemple.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Par défaut
    Bon, tu avais raison Jim_nastiq !

    En effet les composants n'étaient pas initialisés lorsque je les ajoutais dans mon array, j'ai modifié mon code de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public var labelArray:Array = new Array();
    public var letterArray:Array = new Array("A","B","C"....);
     
    		public function init():void{
    labelArray = [letter1,letter2,....,letter12];
    			fillTable();
    		}
    Voila, la chose à retenir: les variables globales d'un <mx:Script> sont déclarées en même temps que les composants mxml, quel que soit l'ordre dans lequel ils sont déclarés dans le code !

    Merci pour ta remarque !!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Par défaut
    Ah tu as été plus rapide que moi :p

    Je ne sais pas comment parcourir la liste des containers...
    Cela dit le code marche très bien maintenant

    Merci!

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    Je ne sais pas comment parcourir la liste des containers.
    La méthode getChildren() d'un container renvoie un tableau équivalent à celui que tu construis... Sauf qu'il peut contenir d'autres éléments que tes Labels.

    Voila, la chose à retenir: les variables globales d'un <mx:Script> sont déclarées en même temps que les composants mxml, quel que soit l'ordre dans lequel ils sont déclarés dans le code !
    Il faut comprendre qu'un fichier mxml correspond à la définition d'une classe.
    Les variables définies dans le tag script correspondent aux attributs de ta classe. Ces variables sont effectivement créées en même temps que l'instance, indépendamment de la position du tag script dans le fichier !! (heureusement)
    Ensuite les objets visuels sont créés dans un processus beaucoup plus complexe constitué de plusieurs phases. La fin de la création est signalée par un événement.

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

Discussions similaires

  1. [XML] Lire un OBJET dans un OBJET dans un ARRAY
    Par Irokoi dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 24/05/2013, 14h53
  2. [POO] Suppresion d'un objet dans un array
    Par Myfred dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 13/03/2008, 14h38
  3. acceder a un objet dans un CPropertySheet
    Par ludoviskm dans le forum MFC
    Réponses: 6
    Dernier message: 21/11/2004, 08h58
  4. [CR9] redimensionner un objet dans la section détail !
    Par LIM dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 27/04/2004, 18h19
  5. [arbre] Sauvegarder un objet dans un fichier
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 00h55

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