Реализация перетаскивания вручную в списке Flex - PullRequest
0 голосов
/ 15 мая 2009

У меня есть приложение Flex, которое отображает коллекцию предметов в одном из нескольких List с, в зависимости от того, как классифицируется предмет. Перетаскивая элементы между списками, пользователь запускает процесс на стороне сервера, который пытается переклассифицировать элементы. Затем процесс на стороне сервера возвращает некоторый XML, который либо содержит сообщение об ошибке, либо «ОК».

Требуется, чтобы пользовательский интерфейс выполнял перемещение с помощью перетаскивания, если сервер возвращает OK, и не выполняет никаких операций, если сервер возвращает ошибку. Использование обработчиков перетаскивания по умолчанию (установка dragEnabled=true и dropEnabled=true для List s), по-видимому, всегда выполняет перетаскивание.

Насколько я могу судить, единственный способ для меня получить достаточный контроль над вещами, чтобы справиться с асинхронной проверкой сервера - это реализовать перетаскивание в и из списков вручную. Поэтому я прочитал документацию Adobe и попытался адаптировать их пример.

Проблема, с которой я столкнулся, заключается в том, что, насколько я могу судить, мне нужно обнаруживать перетаскивание, подключив событие mouseMove в Списке. Затем я передаю список в качестве инициатора в процедуру DragManager.doDrag.

Работая таким образом, возникает ряд проблем: прокси-изображение по умолчанию - это размер всего списка, попытка использовать полосу прокрутки отключает обнаружение перетаскивания и т. Д. Очевидно, что я делаю что-то не так.

Кто-нибудь пробовал реализовать перетаскивание List s вручную? Есть ли быстрый способ правильно определить события перетаскивания? Должен ли я охотиться за фактическим itemRenderer, который пользователь перетаскивает и передает в качестве инициатора?

Ответы [ 2 ]

2 голосов
/ 16 мая 2009

Я думаю, что ваш инициатор перетаскивания должен быть средством визуализации, которое вы перетаскиваете, а не весь элемент управления List.

0 голосов
/ 16 мая 2009

Хммм ... если я понимаю, что вы пытаетесь сделать здесь, вы хотите перетащить каплю, но отменить, если сервер возвращает ошибку?

Я бы обработал событие dragEnd и проверил состояние сервера. Если сервер вернул ошибку, просто переместите данные обратно в исходный список и не добавляйте их в новый список, в противном случае просто выполните поведение по умолчанию. Не стесняйтесь комментировать о разъяснениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...