Я сам не пробовал, но немедленное предотвращение поведения по умолчанию - единственный способ остановить сетку при копировании или перемещении.
Попробуйте отключить поведение по умолчанию и сохранить событие перетаскивания. Затем, если вы нажмете «Нет», вы уже остановили событие. Если пользователь нажимает «да», вы можете (это часть, в которой я не уверен) повторно отправить событие сброса в сетке. Надеюсь, он будет вести себя нормально. Чтобы передать событие в обработчик Alert, вы можете просто использовать свойство data в окне Event для его отслеживания.
private function dg1_dragDropHandler(evt:DragEvent):void
{
// Perform some actions here...
// .......
evt.preventDefault();
// Show Message to Confirm.
Alert.show('Proceed?', 'Title', Alert.YES | Alert.NO, null, handleAlert, null, Alert.YES).data = evt;
}
private function handleAlert(evt:CloseEvent):void
{
if (evt.detail == Alert.YES)
{
// Perform the functions as necessary
var dgEvt:DragEvent = Alert(evt.currentTartet).data;
var newDrag:DragEvent; //need a new event because the default behaviour on the old one is still prevented
//copy event values to new drag event
dg1.dispatchEvent(newDrag);
}
else
{
// Execute the script to prevent the dropping of the object.
// How can I call the DragEvent.preventDefault(); function from here?
}
Опять же, я не совсем уверен, сработает ли это, просто с моей головы. Конечно, вам нужно удалить пользовательский обработчик события dragDrop из вашей сетки, прежде чем вы повторно отправите одобренное перетаскивание, в противном случае ваш обработчик может запретить использование по умолчанию, затем выдать предупреждение и повторять снова и снова.