Aide - Recherche - Membres - Calendrier
Version complète : ajout, suppression de noeud dans un tree
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
matthieuS
Bonjour,

J'ai un composant "tree" (treeContentsActivity) que j'alimente par le fichier xml suivant :

CODE
var dataX:XML = <node label="racine">
                   <node label="premLevelQuizz" />
           <node label="premLevelGroupe">
              <node label="deuxLevelContenu1" />
                  <node label="deuxLevelContenu2" />
           </node>
                </node>


Ensuite je sélectionne un noeud et j'ajoute un nouveau noeud à l'endroit sélectionné avec le code suivant :

CODE
var testItem:Object = treeContentsActivity.selectedItem;
var newNode:XML = <node label="newLevel"></node>;
treeContentsActivity.dataDescriptor.addChildAt(testItem, newNode, 0, this.dataX);



Je souhaiterais pourvoir supprimer un noeud en sélectionnant le noeud.
Tout le contenu du noeud sera supprimé également.

J'ai essayer avec treeContentsActivity.dataDescriptor.removeChildAt(.........)
Mais je n'arrive pas à supprimer le contenu que j'ai sélectionné.

Merci de m'indiquer la procédure.
Fusion
Pour gérer les données, il faudrait voir du côté du dataProvider plutôt que du dataDescriptor...

CODE
treeContentsActivity.dataProvider.removeItemAt(indice);
matthieuS
CITATION(Fusion @ Jul 5 2007, 01:35 PM) *
Pour gérer les données, il faudrait voir du côté du dataProvider plutôt que du dataDescriptor...

CODE
treeContentsActivity.dataProvider.removeItemAt(indice);



Sous adobe flex 2 builder
la méthode removeItemAt ne semble pas apparaitre dans le choix des méthodes

J'ai essayé de mettre un indice mais sans succès.
Je n'arrive toujours pas à supprimer un noeud.

Fusion
CITATION(matthieuS @ Jul 5 2007, 03:43 PM) *
La méthode removeItemAt ne semble pas apparaitre dans le choix des méthodes.


Bizarre ça, le Tree possède pourtant un dataProvider, donc la méthode devrait s'appliquer... Je ne peux pas te dire pour Flex Builder, je ne m'en suis jamais servi. Mais un dataProvider se comporte comme un ArrayCollection, et donc on doit pouvoir lui appliquer les méthodes getItemAt, addItem, removeItemAt, etc...

De quelles méthodes disposes-tu sur le dataProvider de ton Tree?
matthieuS
CITATION(Fusion @ Jul 5 2007, 01:47 PM) *
Bizarre ça, le Tree possède pourtant un dataProvider, donc la méthode devrait s'appliquer... Je ne peux pas te dire pour Flex Builder, je ne m'en suis jamais servi. Mais un dataProvider se comporte comme un ArrayCollection, et donc on doit pouvoir lui appliquer les méthodes getItemAt, addItem, removeItemAt, etc...

De quelles méthodes disposes-tu sur le dataProvider de ton Tree?



En fait, removeItemAt, me fait pas d'erreur de compilation.
Mais je ne sais pas quoi lui passé en paramètre.

Il faut utiliser un méthode de ce style je suppose mais cela ne marche pas

var indice:int = treeContentsActivity.selectItem
var indice:int = treeContentsActivity.selectIndices

je te remercie de m'aider
c'est cool
Fusion
CITATION(matthieuS @ Jul 5 2007, 03:52 PM) *
En fait, removeItemAt, me fait pas d'erreur de compilation.
Mais je ne sais pas quoi lui passé en paramètre.

Il faut utiliser un méthode de ce style je suppose mais cela ne marche pas

var indice:int = treeContentsActivity.selectItem
var indice:int = treeContentsActivity.selectIndices

je te remercie de m'aider
c'est cool


Tous tes noeuds sont stockés dans un tableau : le dataProvider du Tree. Pour pouvoir supprimer un élément il faut lui dire où il se trouve, c'est pour ça qu'il faut un indice.

Le selectedItem (et non pas le selectItem icon_razz.gif ) te donne l'indice de l'élément sélectionné. Avec ça tu devrais t'en sortir. Ca m'a l'air d'être la bonne solution.
Le selectedItems renvoie un tableau contenant plusieurs noeuds sélectionnés en cas de sélection multiple.
matthieuS
CITATION(Fusion @ Jul 5 2007, 01:59 PM) *
Tous tes noeuds sont stockés dans un tableau : le dataProvider du Tree. Pour pouvoir supprimer un élément il faut lui dire où il se trouve, c'est pour ça qu'il faut un indice.

Le selectedItem (et non pas le selectItem icon_razz.gif ) te donne l'indice de l'élément sélectionné. Avec ça tu devrais t'en sortir. Ca m'a l'air d'être la bonne solution.
Le selectedItems renvoie un tableau contenant plusieurs noeuds sélectionnés en cas de sélection multiple.



Franchement, je dois rater un truc car j'ai bien mis l'indice mais toujours rien avec :

CODE
treeContentsActivity.dataProvider.removeChildAt(treeContentsActivity.selectedItem)


et la méthode suivante cela me supprime le dernier fils du noeud sélectionné alors que moi je veux supprimer le noeud sélectionné avec les fils à l'intérieur :
CODE
treeContentsActivity.dataDescriptor.removeChildAt(treeContentsActivity.selectedItem, treeContentsActivity.selectedItem.children[0] , 0);

Fusion
CITATION(matthieuS @ Jul 5 2007, 04:05 PM) *
CODE
treeContentsActivity.dataProvider.removeChildAt(treeContentsActivity.selectedItem)


Alors là ... icon_redface.gif
je me suis trompé, c'était :
CODE
treeContentsActivity.dataProvider.removeChildAt(treeContentsActivity.selectedIndex);
matthieuS
CITATION(Fusion @ Jul 5 2007, 02:10 PM) *
Alors là ... icon_redface.gif
je me suis trompé, c'était :
CODE
treeContentsActivity.dataProvider.removeChildAt(treeContentsActivity.selectedIndex);



C'est pareil.

J'ai même essayer de faire
CODE
treeContentsActivity.dataProvider.removeChildAt(1);


cela fait rien non plus.
matthieuS
Pour information,

cela fonctionne actuellement, j'ai trouvé un truc.

je le poste :

CODE
// récupération de l'item en sélection
var testItem:Object = treeContentsActivity.selectedItem;
// récupération du parent à supprimer
var selParent:XML = treeContentsActivity.getParentItem(testItem);
//suppression du noeud
treeContentsActivity.dataDescriptor.removeChildAt(selParent,testItem,testItem.childIndex(),dataX);



je vous remercie de votre aide.
A bientôt
Bonne soirée
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.