Как только я позвонил DragManager.acceptDrag
, есть ли способ "отменить" перетаскивание? Скажите, что у меня есть представление, которое может принимать перетаскивание, но только в определенных областях. Когда пользователь перетаскивает одну из этих областей, я вызываю DragManager.acceptDrag(this)
(из обработчика DragEvent.DRAG_OVER
), но если пользователь затем выходит из этой области, я хотел бы изменить состояние перетаскивания на непринятое и показать DragManager.NONE
обратная связь. Однако ни DragManager.acceptDrag(null)
, ни DragManager.showFeedback(DragManager.NONE)
, похоже, не имеют никакого эффекта. Как только я принял перетаскивание, установил тип обратной связи, я не могу изменить его.
Просто чтобы прояснить: области, в которые пользователь должен иметь возможность перетаскивать, не являются компонентами или даже отображаемыми объектами, на самом деле это просто диапазоны в тексте текстового поля (например, выделения). Если бы они были их компонентами, я бы решил это, заставив каждого из них принимать события перетаскивания индивидуально. Я думаю, я мог бы создать прокси-компоненты, которые плавают по тексту, чтобы эмулировать его, но я бы предпочел не делать этого, если это не нужно.
Теперь мне удалось заставить его работать как в AIR, так и в браузере, но только поместив прокси-компоненты поверх тех диапазонов текста, в которые вы могли бы уронить объекты. Таким образом, я получаю правильную обратную связь, и при выходе из режима перетаскивания автоматически не принимаются.
Это самая странная вещь о D & D в AIR:
DragManager.doDrag(initiator, source, event, dragImage, offsetX, offsetY);
В Flex на основе браузера offsetX
и offsetY
должны быть отрицательными (так говорится в документации, и она отлично работает). Однако при запуске точно такого же кода в AIR вы должны сделать смещения положительными. Те же цифры, но положительные. Это очень, очень странно.
Я протестировал еще кое-что, и что @ maclema работает, но не в том случае, если вы работаете в AIR. Кажется, что перетаскивание в AIR отличается. Это действительно очень странно, потому что обратная связь не только не отображается правильно, и от нее невозможно отказаться, но и координаты также полностью отключены. Я только что попробовал свое приложение в браузере вместо AIR, и перетаскивание полностью прервано.
Кроме того, пропуск обработчика dragEnter
прекрасно работает в AIR, но нарушает все при работе в браузере.