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 :

ajouter des objets enfants dynamiquement dans un Accordion


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de youtch
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 94
    Par défaut ajouter des objets enfants dynamiquement dans un Accordion
    J'ai l'intention de créer une arborescence d'objets, qui dériveraient tous d'un objet de type Accordion "accdCategories" : en l'occurence des objets VBox qui intégreront chacun un objet Accordion, qui intégrera plusieurs objets de type VBox. Voici le premier objet en mxml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <mx:Accordion id="accdContacts" width="100%" height="100%">
    	<mx:VBox label="Par catégories" width="100%" height="100%">
    		<mx:Accordion id="accdCategories" width="100%" height="100%"  backgroundColor="#AACEB0" color="#0F1355">
    		</mx:Accordion>
    	</mx:VBox>
    	<mx:VBox label="Par noms" width="100%" height="100%">
    	</mx:VBox>
    </mx:Accordion>
    Pour le script, je créé dynamiquement mes objets, j'instancie l'objet "obj" qui sera le descendant de "accdCategories", mais ni le type DisplayObject, ni le type VBox ne permettent de faire fonctionner ce mécanisme.
    Je ne suis pas sur de devoir utiliser Display Object, est-ce le bon chemin ?

    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
    20
    21
    22
    23
    24
    25
    26
    27
     
    public function chargerAccordion():void{
     
    	var result:SQLResult = [ requete de mes données ]
    	accdContacts.removeAllChildren(); 
     
    	var i:Number=0;
    	for each(var elt:Object in result.data) {
    		// Composition des item vBox dans accdContacts :
    		i++;
    		var container:VBox = new VBox();
    		container.label = elt.titre+" - "+elt.description;
    		container.id = "vbCategorie+"+i;
    		accdCategories.addChild(container); // Ici, pas de problème l'élément Vbox est bien créé
     
    		var result2:SQLResult = [ requete de mes données ]
    		var j:Number=0;
    		for each(var elt:Object2 in result2.data) {
    			var container2:Accordion = new Accordion();
    			container2.label = "Les auteurs :";
    			container2.id = "vbCategorie1Auteur"+j;
    			container2.addEventListener(MouseEvent.CLICK,pushData);
    			var obj2:DisplayObject=accdCategories.getChildAt(i);
    			obj2.addChild(container2); // Ici une erreur survient
    		}
    	}
    }

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    je pense que c'est ton incrémentation de i qui n'est pas bonne. En effet, ton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var obj2:DisplayObject=accdCategories.getChildAt(i);
    au premier tour de boucle équivaut à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var obj2:DisplayObject=accdCategories.getChildAt(1);
    sauf que tu n'as pas d'objet à l'index 1 (les index commencant à 0)

  3. #3
    Membre confirmé Avatar de youtch
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 94
    Par défaut
    Non Madfrix, j'ai toujours une erreur "erreur 1061: Appel à la méthode addChild peut-être non définie, via la référence de type static flash.display : DisplayObject"

    Oups, et aussi je me suis trompé dans mon code, et dans sa logique de construction d'arborescence, donc voici le bon code (le code MXML est nickel) :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    public function chargerAccordion():void{
     
    	var result:SQLResult = [ requete de mes données ]
    	accdCategories.removeAllChildren(); 
     
    	var i:Number=0;
     
    	// pour chaque catégorie des resultats de ma requete de données
    	for each(var elt:Object in result.data) { 
     
    		// Composition des item vBox dans accdCategories
    		var container:VBox = new VBox();
    		container.label = elt.titre+" - "+elt.description;
    		container.id = "vbCategorie+"+(i+1); // ( i+1 ) c'est juste pour avoir des id qui commencent à 1 !
    		accdCategories.addChild(container); // Ici, pas de problème l'élément Vbox est bien créé
     
    		// On génère un nouvel objet Accordion qui contiendra les auteurs de la catégorie en cours
    		var container2:Accordion = new Accordion();
    		container2.label = "Les auteurs :";
    		container2.id = "accdCategorie"+(i+1)+"Auteurs"; 
    		var obj2:DisplayObject=accdCategories.getChildAt(i);
    		obj2.addChild(container2); // Ici une erreur survient, l'erreur 1061: Appel à la méthode addChild peut-être non définie, via la référence de type static flash.display:DisplayObject
     
    		i++;
     
    		var result2:SQLResult = [ requete de mes données des auteurs, pour la catégorie en cours] 
    		var j:Number=0;
    		// Pour chaque auteur de la catégorie en cours
    		for each(var elt2:Object in result2.data) {
    			// (...)
    			j++;
    		}
    	}
    }
    Deuxième question (indépendante de la première) : dans la boucle 2, on ajoutera les différents auteurs de la catégorie en cours, mais comment sélectionner un objet dont l'ID est une variable que l'on vient de générer ?
    Je pense qu'on doit reprendre les indices i dans le nom des objets sur lesquels on appliquera addChild dans la boucle 2... là je sèche !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Salut,

    Si je comprends bien, tu récupères dans la variable obj2 la VBox que tu as créé juste avant et qui se trouve dans l'objet container ?!
    Tu récupères ligne 22 ce que tu viens d'ajouter ligne 16.

    Donc pour ton souci : simplement virer la ligne 22 et remplacer la 23 par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    container.addChild(container2)
    Ce que tu fais pourrait aussi marcher mais il faudrait utiliser DisaplyObjectContainer ou UIComponent en lieu et place de DisplayObject. Tu pourrais même utiliser VBox puisqu'en l’occurrence, tu sais qu'il s'agit d'une VBox...

    Pour ta question 2, y a différentes solutions...Mais faut voir quel est vraiment le problème. As-tu besoin d'identifier les auteurs ? Pourquoi ? N'ont-il pas déjà des id uniques en base plutôt que d'en générer dynamiquement coté client ?

    Edith a corrigé l'ortho

Discussions similaires

  1. [Débutant] Ajouter des noeuds enfant dans un noeud (XML)
    Par dad72 dans le forum C#
    Réponses: 1
    Dernier message: 28/10/2011, 23h44
  2. [AC-2003] Ajouter des pages en dynamique dans un report
    Par Chrysostome dans le forum IHM
    Réponses: 2
    Dernier message: 19/05/2011, 18h59
  3. Ajouter des Listener sur des objets créés dynamiquement
    Par floctc dans le forum Composants
    Réponses: 10
    Dernier message: 23/04/2010, 16h35
  4. Réponses: 2
    Dernier message: 27/10/2008, 13h50
  5. [VB6] - Ajout d'objet en dynamique dans un SSTab
    Par shaftJackson dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/12/2006, 02h19

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