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);
}
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)
}
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();
}
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 !