2009-05-15 4 views
0

J'ai une application Flex qui affiche une collection d'éléments dans l'une des List s selon la classification de l'article. En faisant glisser des éléments entre les listes, l'utilisateur lance un processus côté serveur qui tente de reclasser les éléments. Le processus côté serveur renvoie ensuite du code XML qui contient un message d'erreur ou un 'OK'.Implémentation du glissement manuellement sur une liste flexible

L'interface utilisateur doit effectuer un 'glisser-déplacer' si le serveur renvoie OK et non-op si le serveur renvoie une erreur. L'utilisation des gestionnaires de glissement par défaut (réglage dragEnabled=true et dropEnabled=true sur le List s) semble toujours effectuer une copie de glissement. Pour autant que je sache, la seule façon pour moi d'avoir assez de contrôle sur les choses pour gérer la validation du serveur asynchrone est de mettre en œuvre manuellement le glisser vers et depuis les listes. J'ai donc lu Adobe's documentation et j'ai essayé d'adapter leur exemple. Le problème que j'ai, c'est que, pour autant que je sache, j'ai besoin de détecter le glissement en connectant l'événement mouseMove dans la liste. Je passe ensuite la liste en tant qu'initiateur à la routine DragManager.doDrag.

Travailler de cette manière présente un certain nombre de problèmes: l'image proxy par défaut est la taille de la liste entière, la tentative d'utiliser la barre de défilement déclenche une détection de traînée, etc. Clairement je fais quelque chose de mal.

Est-ce que quelqu'un a essayé de faire glisser manuellement sur List s manuellement? Y a-t-il une astuce rapide pour détecter correctement les événements de traînée? Devrais-je être en train de traquer l'itemRenderer réel que l'utilisateur est en train de faire glisser et passer en tant qu'initiateur?

Répondre

2

Je pense que votre initiateur de glissement doit être le rendu d'élément que vous faites glisser plutôt que le contrôle List entier.

+0

Je viens de découvrir que cela fonctionne. C'est à peu près le seul moyen d'imiter le comportement par défaut de la liste. –

0

Hmmm ... si je comprends ce que vous essayez de faire ici, vous voulez faire glisser une goutte, mais annuler si le serveur renvoie une erreur?

Ce que je ferais est de gérer l'événement dragEnd et de vérifier l'état du serveur. Si le serveur a renvoyé une erreur, il suffit de replacer les données dans la liste d'origine et de ne pas les ajouter à la nouvelle liste, sinon faites simplement le comportement par défaut. N'hésitez pas à commenter les clarifications.

Questions connexes