J'ai deux commandes mx:TileList
que j'utilise pour autoriser l'édition d'objets par lot. Le premier contient une collection de toutes les données disponibles et le second contient le lot actuel. Les deux sont liés à ArrayCollections
, et en utilisant la fonctionnalité native glisser-déposer du contrôle TileList, les données sont déplacées d'un ArrayCollection
à l'autre lorsqu'un objet est déplacé entre eux.Flex Drag & Drop: Détection du moment où toutes les données ont été déplacées de la source à la destination
Je dois changer le currentState
pour afficher & réinitialiser les commandes de manipulation de lots lorsque le nombre de lots va de 0 à n ou n à articles. Basé sur the documentation, j'aurais pensé que je devrais écouter l'événement dragComplete
, mais mon test montre qu'au lieu de tirer après que les données aient été enlevées de l'ArrayCollection source et ajoutées à l'ArrayCollection de destination, il tire (uniformément) entre ces deux actes.
Les deux listes sont similaires à ceci:
<mx:TileList
id="srcList"
dragEnabled="true"
dropEnabled="true"
dragMoveEnabled="true"
dataProvider="{images}"
dragComplete="handleDragComplete(event)"
allowMultipleSelection="true"
/>
Et voici la source de la fonction handleDragComplete
:
private function handleDragComplete(e:DragEvent):void{
trace(e.dragInitiator.name + '.dragComplete: batch.length=' + batch.length.toString());
trace(e.dragInitiator.name + '.dragComplete: images.length=' + images.length.toString());
if (batch.length > 0){
currentState = 'show';
}else{
currentState = '';
}
}
Et enfin, voici quelques exemple de sortie de l'exécution du code. Ceux-ci sont tous exécutés l'un après l'autre.
Cas 1:
Les charges d'application avec 10 objets dans la première liste et le lot est vide. J'ai traîné 1 objet de la liste des sources vers la liste des lots.
srcList.dragComplete: batch.length=1
srcList.dragComplete: images.length=10
(prévoir: 1,9)
De toute évidence, l'objet a été ajouté à la ArrayCollection par lots, mais pas retiré de la source.
Cas n ° 2:
Maintenant, je vais faire glisser un 2ème objet dans le lot.
srcList.dragComplete: batch.length=2
srcList.dragComplete: images.length=9
(prévoir: 2,8)
Tout d'abord, nous pouvons voir que images.length a changé, montrant que l'objet que je traîné hors de la liste des sources à la liste des lots a été enlevé APRÈS l'événement dragComplete a été déclenché. La même chose se produit cette fois: Le nouvel objet est ajouté au lot ArrayCollection (batch.length = 2), les événements dragComplete
se déclenchent (en exécutant ces traces), puis l'objet est supprimé de la collection ArrayCollection source.
Cas n ° 3:
Maintenant, je vais faire glisser les images de la liste des lots à leur emplacement d'origine dans la liste des sources.
batchList.dragComplete: batch.length=2
batchList.dragComplete: images.length=10
(prévoir: 0,10)
Nous pouvons voir que batch.length n'a pas baissé, mais le tableau d'images source est de retour à sa longueur initiale de 10.
QUESTION: Est-ce que je fais quelque chose de mal? Y at-il un autre événement que je pourrais écouter? (Note: J'ai essayé deuxDragExit
etDragDrop
, juste pour être sûr, et ceux qui se comportent comme prévu, mais ne sont pas ce que je besoin.) Ou est-il un autre moyen pour obtenir les données que je veux? Ou ... ai-je trouvé un bug dans le SDK?
Oui, cela a exactement ce dont j'ai besoin. Je vous remercie! Je vais modifier mon code dans votre réponse. –