Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flex
Flex Forum d'entraide sur la programmation Adobe Flex : applications Internet riches (RIA)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2011, 19h28   #1
Futur Membre du Club
 
Inscription : juin 2010
Messages : 80
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2010
Messages : 80
Points : 19
Points : 19
Par défaut tree et noeud parent

bonsoir le monde
j'ai crée un arbre comme suit :
Code :
1
2
3
4
5
<mx:Tree id="tree1" iconField="@iconSymbol1" labelField="libelle" width="170"  showRoot="true" height="200">
 
 
 
				</mx:Tree>
j'allimente cet arbre avec des elements recu d'une fonction externe 'loadEec()',jusque la tout va bien :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
			public function loadEec():void { 
 
				loaderServiceEec.getEec();
			} 
 
			private function handleLoadResultEec(ev:ResultEvent):void { 
 
				Eec = ev.result as ArrayCollection;
 
 
				tree1.dataProvider= noeud;
 
 
			}
jusque la tout va bien ,et mon arbre s'affiche (pour le moment ,j'affiche les resultats de ma fonction, donc des elements idependants(sans parents)

genre :

Code :
1
2
3
4
-elem1
-elem2
-elem3
...
je voudrais ajouter un parent du genre :
Code :
1
2
3
4
-parent1
   -elem1
   -elem2
   -elem3
j'ajoute une array collection a mon code comme suit :
Code :
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
	private function handleLoadResultEec(ev:ResultEvent):void { 
 
				Eec = ev.result as ArrayCollection;
 
				 var noeud:ArrayCollection =new ArrayCollection([
					new Person("Susan", new ArrayCollection([
						new Person("John"),
						new Person("Tiffany",Eec ),
						new Person("Michael", new ArrayCollection([
							new Person("Jannette"),
							new Person("Alan", new ArrayCollection([
								new Person("Alice"),
								new Person("Jane")
							]))
						])),
						new Person("Peter"),
 
					])) 
				]);
 
 
 
				tree1.dataProvider= noeud;
 
 
			}
et pour la sortie j'obtiens les informations donné par ma fonction ,mais pour les parrents (normalement une classe AS3 'person') il affiche Object Person
de la sorte :
Code :
1
2
3
4
5
 
-Object Person
   Object Person
       -elem1
       -elem2
ma classe person :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package vo
 
{
 
	import mx.collections.ArrayCollection;
 
	public class Person{
 
		public var name:String;
		public var children:ArrayCollection;
 
		public function Person(_name:String, _children:ArrayCollection = null){
			this.name = _name;
			if(_children != null)
				this.children = _children;
		}//end Person constructor
 
	}//end Person class
 
}//end pac
pourquoi mon tree n'affiche pas les valeurs de mon objet mais plutot 'object Person' ,sachant que pour les valeurs obtenu pas ma fonction ca marche niquel ?!

merci d'avance pour votre aide
execrable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 21h11   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
bonjour,

est ce que ton objet Person possède une propriété libelle comme défini dans ton labelField ?

PS: passe par un objet XML plutot ce sera plus simple et plus lisible
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 10h44   #3
Futur Membre du Club
 
Inscription : juin 2010
Messages : 80
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2010
Messages : 80
Points : 19
Points : 19
bonjour et merci pour ta reponse
en effet non ,mon objet person ne possède pas une proprieté libellé ,mais plutot une propriété name
donc j'ai changé mon code en fonction de ca ,labelfield="name"
maintenant seul le noeud parent s'affiche ,mais pas le resultat de ma fonction
donc maintenant il faut que je specifie a la fois le labelfield pour le noeud parent et pour les fils ,donc 2 valeurs de labelfield ,comment faire pour cela ??
execrable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 11h18   #4
Futur Membre du Club
 
Inscription : juin 2010
Messages : 80
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2010
Messages : 80
Points : 19
Points : 19
sinon je suis passé par un objet XML comme vous m'avez conseillé
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<mx:Tree id="tree"  labelField="@label" showRoot="true" width="160">
						<mx:XMLListCollection id="MailBox">
							<fx:XMLList>
								<folder label="Mail">
									<folder label="INBOX"/>
									<folder label="Personal Folder">
										<Pfolder label="Eec" />
 
										<Pfolder label="Personal" isBranch="true" /> 
																			</folder>
									<folder label="Sent" />
									<folder label="Trash" />
								</folder>
							</fx:XMLList>
						</mx:XMLListCollection>
					</mx:Tree>
mais comment injecter mes données provenant de ma fonction ,vers une feuille de l'arbre ?
execrable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 12h34   #5
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Avec les fonction XML

Code :
1
2
3
4
5
6
 
var myXML:XML = tree.dataProvider as XML;
 
myXML..(@isBranch == "true").appendChild(XMLList("ici du xml..."));
 
tree.dataProvider = myXML;
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 12h50   #6
Futur Membre du Club
 
Inscription : juin 2010
Messages : 80
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2010
Messages : 80
Points : 19
Points : 19
merci pour ta reponse ,
mais franchement j'ai pas compris grand chose
ce que je voudrais faire est precisement d'injecter ma source de donnée dans la partie en rouge,en utilisant un dataProvider ou quelque chose du genre :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<mx:Tree id="tree"  labelField="@label" showRoot="true" width="160">
						<mx:XMLListCollection id="MailBox">
							<fx:XMLList>
								<folder label="Mail">
									<folder label="INBOX"/>
									<folder label="Personal Folder">
										<Pfolder dataProvider="{Eec}" />
										
										<Pfolder label="Personal" isBranch="true" /> 
																			</folder>
									<folder label="Sent" />
									<folder label="Trash" />
								</folder>
							</fx:XMLList>
						</mx:XMLListCollection>
					</mx:Tree>
execrable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 13h05   #7
Futur Membre du Club
 
Inscription : juin 2010
Messages : 80
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2010
Messages : 80
Points : 19
Points : 19
Ou bien n'y aurait-il pas juste une façon plus simple d'ajouter un noeud parent aux feuilles générées par mon datasource ?
execrable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 13h54   #8
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Il faut que tu récupères tout d'abord ton dataProvider sous forme d'objet XMLList :

Code :
1
2
 
var source:XMLList = (tree.dataProvider as XMLListCollection).source;
Ensuite, tu ajoutes dynamiquement un noeud à cette liste construite dynamiquement via une boucle ou autre :

Code :
1
2
 
source.appendChild(XMLList("<exemple label=\"un exemple\">...</exemple>"));
Enfin, tu réaffectes cette liste à ton tree :

Code :
1
2
 
tree.dataProvider = source;
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/05/2011, 14h36   #9
Futur Membre du Club
 
Inscription : juin 2010
Messages : 80
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2010
Messages : 80
Points : 19
Points : 19
voila ce que j'ai fait :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
tree.dataProvider=Eec;
 
			var source:XMLList = (tree.dataProvider as XMLListCollection).source;
 
 
 
			var nodeName:String = "exemple";
			var nodeValue:String = "ok";
			var xmlList:XMLList = XMLList("<"+nodeName+">"+nodeValue+"</"+nodeName+">");
 
			source.appendChild(xmlList);
			Alert.show(source);
			tree.dataProvider = source;
mon tree
Code :
1
2
3
<mx:Tree id="tree" iconField="@iconSymbol1" labelField="libelle" width="170"  showRoot="true" height="200">
 
					</mx:Tree>
mais cela ne donne toujours rien
execrable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 14h41   #10
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Si tu fais un :

Code :
1
2
 
Alert.show(source.toXMLString());
obtiens tu la bonne forme de XML que tu souhaites ?
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 14h51   #11
Futur Membre du Club
 
Inscription : juin 2010
Messages : 80
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2010
Messages : 80
Points : 19
Points : 19
au faite ,mon tree prenait la source de donnée Eec et afficher les resultats en fonction de ca
donc le traitement s'arreter au niveau de la ligne rouge ,donc pas d'execution de Alert.show(source.toXMLString());
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
tree.dataProvider=Eec;
			
			var source:XMLList = (tree.dataProvider as XMLListCollection).source;
			
			
			
			var nodeName:String = "exemple";
			var nodeValue:String = "ok";
			var xmlList:XMLList = XMLList("<"+nodeName+">"+nodeValue+"</"+nodeName+">");
			
			source.appendChild(xmlList);
			Alert.show(source.toXMLString());
			tree.dataProvider = source;
execrable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 15h19   #12
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
On part du principe que ton dataProvider sera de type XMListCollection donc retire cette instruction

Maintenant, qu'obtiens tu ? Vois tu ton alert ?
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 15h28   #13
Futur Membre du Club
 
Inscription : juin 2010
Messages : 80
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2010
Messages : 80
Points : 19
Points : 19
d'accord j'ai retiré l'instruction
j'obtiens rien ,pas d'Alert ,mais l'exception suivante :
Code :
TypeError: Error #1009: Il est impossible d'acceder &#65533;a propri&#36201; ou &#65533;a m&#36072;ode d'une r&#35305;rence d'objet nul.
execrable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 15h37   #14
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
ok, c'est parce que tu as pas affecté de dataProvider à ton tree.

Configure en un comme ceci :

Code :
1
2
3
4
5
 
[Bindable] protected var xml:XML=<root></root>;
....
....
<mx:Tree id="tree" dataProvider="{xml}" iconField="@iconSymbol1" labelField="libelle" width="170"  showRoot="true" height="200" />
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 16h03   #15
Futur Membre du Club
 
Inscription : juin 2010
Messages : 80
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2010
Messages : 80
Points : 19
Points : 19
oui mon Alert renvoi la valeur !
donc maintenant il faudra utiliser un appendChild ,et y passer en parametre ma datasource (qui est un arrayCollection)
merci énormement pour la piste
execrable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 09h53   #16
Modérateur
 
Homme
Consultant Flex / Java
Inscription : novembre 2008
Messages : 452
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Luxembourg

Informations professionnelles :
Activité : Consultant Flex / Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2008
Messages : 452
Points : 637
Points : 637
Salut,
n'oublie pas le tag 'résolu' si c'est bien le cas
__________________
N'oubliez pas avant de poster :
et bien sûr la doc Flex
Krazymins est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h55.


 
 
 
 
Partenaires

Hébergement Web