Обновить остановленное событие Flex - PullRequest
1 голос
/ 11 октября 2011

У меня есть несколько прослушивателей событий, настроенных на прослушивание события щелчка на элементе управления.

Я не знаю, является ли это правильным предположением, но я полагаю, что у меня есть настроенное прослушивание "первым". После того, как первый слушатель поймает событие, он передаст управление остальным слушателям (при необходимости).

Это в основном говорит пользователю: «Вы пытаетесь куда-то перейти, но у вас есть несохраненные изменения, вы хотите: 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(), но это не сработало либо.

Могу ли я сделать это? Есть ли лучший способ?

1 Ответ

1 голос
/ 11 октября 2011

Понял!Мне нужно unsavedEvent.target.dispatchEvent(unsavedEvent.clone()); вместо dispatchEvent(unsavedEvent.clone());

Я думаю, что перебрасывание события также меняет цель (то есть на parentComponent из clickComponent), что объясняет, почему мой другой слушатель не отвечал на событиев исходном коде.

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