Aide - Recherche - Membres - Calendrier
Version complète : Tree avec tableau d'objets et drag&drop
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
knb
Bonjour,

J'ai un problème avec le composant tree lorsque je l'utilise avec un data provider de type ArrayCollection d'objets.

Voici le tree :
CODE
<mx:Tree id="tree" editable="false" dragComplete="update()" dragEnabled="true" dragMoveEnabled="true" dropEnabled="true" dataProvider="{treeData}" labelField="label" ></mx:Tree>


Voici le dataprovider placé dans une fonction lancé par l'évènement creationComplete de l'application. Ce data provider est un tableau d'objets imbriqués
Objet1
- objet11
- objet12
Objet2
- objet21
- objet22

CITATION
[Bindable]
public var treeData:ArrayCollection


public function init(){
var obj1:Object=new Object()
obj1.label="un"

var obj11:Object=new Object()
obj11.label="onze";
var obj12:Object=new Object()
obj12.label="douze";

obj1.children=new Array();
obj1.children[0]=obj11;
obj1.children[1]=obj12;

var obj2:Object=new Object()
obj2.label="deux"

var obj21:Object=new Object()
obj21.label="vingun";
var obj22:Object=new Object()
obj22.label="vingdeux";
obj2.children=new Array();
obj2.children[0]=obj21;
obj2.children[1]=obj22;

var tabTree:Array=new Array(obj1,obj2);

treeData=new ArrayCollection(tabTree);

}


Voici mes problèmes :
1. si je déplace un des noeuds via drag&drop, l'affichage du composant TREE ne se met pas à jour automatiquement (il faut attendre le rendu suivant, par exemple en ouvrant/fermant une branche)

2. Pour régler ce problème j'ai tenté les actions suivantes (appelé par un évènement dragComplete="update()" sur le composant Tree)

CITATION
public function update():void {
tree.dataProvider.itemUpdated(null)
}



Cela fonctionne (mise à jour immédiate).
Par contre, au bout de plusieurs drag&drop, cela foire complètement (un item est déplacé mais l'original n'est plus supprimé ! seul la copie est alors "sélectionnable"...

J'ai essayé cette autre méthode :

CITATION
public function update():void {
tree.invalidateList();
tree.validateNow();
}


Et idem, au bout d'un moment, cela bug (la c'est vraiement un bug: la console de debugage ouvre carrement tree.as ligne 2489...)

Bref, est-ce le tableau d'objets qui pose pb ? ou mon utilisation des ArrayCollections ? Ou ma méthode pour forcer la mise à jour du composant ???

Merci !


Tonic
salut,

tu as essayé avec les medthodes "invalidateDisplayList()", "invalidateProperties()" ou encore "invalidateSize()"?
knb
Hélas oui, j'ai essayé la totale
CODE
tree.invalidateList();
tree.invalidateDisplayList()
tree.invalidateProperties()
tree.invalidateSize()
tree.validateNow();
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.