У меня есть несколько прослушивателей событий, настроенных на прослушивание события щелчка на элементе управления.
Я не знаю, является ли это правильным предположением, но я полагаю, что у меня есть настроенное прослушивание "первым". После того, как первый слушатель поймает событие, он передаст управление остальным слушателям (при необходимости).
Это в основном говорит пользователю: «Вы пытаетесь куда-то перейти, но у вас есть несохраненные изменения, вы хотите: 1) сохранить и продолжить 2) отменить изменения и продолжить 3) вернуться и не продолжать.
Вот пример кода для настройки слушателей
clickComponent.addEventListener(MouseEvent.CLICK, parentComponent.saveChanges);
clickComponent.addEventListener(MouseEvent.CLICK, continueOn);
Вот где я ловлю событие в parentComponent
private var unsavedEvent:Event = null;
public function saveChanges(e:Event):void {
if (unsavedEvent == null) {
unsavedEvent = e;
e.stopImmediatePropagation();
Alert.buttonWidth = 150;
Alert.noLabel = "Discard Changes";
Alert.yesLabel = "Save Changes";
Alert.cancelLabel = "Return";
var alert:Alert = Alert.show(
"You have unsaved changes! What would you like to do? ",
"Save?",
Alert.NO | Alert.YES | Alert.CANCEL,
this,
handleUnsavedResponse,
null,
Alert.YES);
}
}
private function handleUnsavedResponse(evt:CloseEvent):void {
var takeAdditionalAction:Boolean = false;
if(evt.detail == Alert.YES) {
save();
takeAdditionalAction = true;
} else if(evt.detail == Alert.NO) {
discard();
takeAdditionalAction = true;
}
if (takeAdditionalAction) {
dispatchEvent(unsavedEvent.clone()); // rethrow the event we caught. not WORKING
}
unsavedEvent = null; //reset the saved event
}
Вызов для dispatchEvent(unsavedEvent.clone());
, похоже, не работает (или, по крайней мере, continueOn
не захватывает событие) Сначала я попытался повторно отправить событие без вызова clone()
, но это не сработало либо.
Могу ли я сделать это? Есть ли лучший способ?