Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Предупредить повторное нажатие кнопки (http://www.flasher.ru/forum/showthread.php?t=151273)

alexg 25.02.2011 14:03

Предупредить повторное нажатие кнопки
 
Здравствуйте!

Итак, имеется небольшое Flex приложение, выполненное как Standalone AIR программа. Приложение представляет собой подобие мастера с набором нескольких страниц и кнопками перехода "Далее", "Назад". Логика работы проста - при нажатии кнопки "Далее" активируется следующее состояние (State) приложения, а при нажатии "Назад", соответственно, предыдущее.

Обработчик нажатия кнопки "Далее" следующий

Код AS3:

protected function onNextButtonClick(event:MouseEvent):void
{                               
    var index:int = getCurrensState();
    setState(++index);
}

Отмечу также, что некоторые страницы визарда не могут быть "пролистаны" без заполнения полей и, соответственно, на таких страницах кнопка "Далее" блокируется до наступления события готовности к дальнейшему переходу.

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

Код AS3:

protected function onNextButtonClick(event:MouseEvent):void
{       
    if (event.target.enabled)
    {
        event.target.enabled = false;
 
        var index:int = getCurrensState();
        setState(++index);
    }
}

И всё равно события приходят дважды (если постараться) и обязательная страница "пролетает". Решение использовать глобальную переменную хотя и помогло, но ИМХО не особенно красиво. Нет ли другого выхода? Например, как то удалять из очереди события повторного нажатия?

P.S.
Flash Builder 4, Flex SDK 4.1.0, AIR SDK 2.5

Спасибо.

mayakwd 25.02.2011 15:02

проверять если следующее состояние обязательно, то блокировать при нажатии nextButton
Код AS3:

nextButton.enabled = false;


alexg 25.02.2011 15:10

Цитата:

Сообщение от mayakwd (Сообщение 976082)
проверять если следующее состояние обязательно, то блокировать при нажатии nextButton
Код AS3:

nextButton.enabled = false;


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


Часовой пояс GMT +4, время: 11:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.