Flex 4: idleCounter, похоже, изменился - большинство онлайн-примеров сейчас не работает! - PullRequest
2 голосов
/ 21 июня 2010

У меня есть то, что я думаю, здесь простая проблема.Я вызываю основной таймер при успешном входе в систему, а затем настраиваю пару обработчиков для обновления некоторых данных по расписанию.(Я не вставил обработчики таймера, потому что я не думаю, что это имеет значение, что они делают). В любом случае, я пытаюсь отключить эти синхронизированные обновления, когда приложение IDLE, но это:* Никогда не срабатывает.Я предполагаю, что это из-за того, как Flex 4 обрабатывает эти объекты, но я не могу найти его в документации.Поиск idleCounter происходит даже пустым.

protected function getUserByIDResult_resultHandler(event:ResultEvent):void
{

    var sysMan:ISystemManager = FlexGlobals.topLevelApplication.systemManager;
    sysMan.addEventListener(FlexEvent.IDLE, userIdle);

    session.user = event.result as User;

    timer = new Timer(5000);
    timer.addEventListener(TimerEvent.TIMER, timer_short);
    timer.start();

    timer2 = new Timer(10000);
    timer2.addEventListener(TimerEvent.TIMER, timer_long);
    timer2.start();

    currentState='Main';
}


private function userIdle(e:FlexEvent):void {
    if (e.currentTarget.mx_internal::idleCounter > 15000) {
        timer.stop();
        timer2.stop();
    }
    if (e.currentTarget.mx_internal::idleCounter < 15000) {
        if ( timer.running == false) {
            timer.start();
            timer2.start();
        }
    }
}

1 Ответ

1 голос
/ 05 июля 2010

Итак, после еще одного исследования, я решил, что событие Idle действительно впереди.Вот упрощенный пример (обратите внимание, что время «приблизительное», что подходит для моих целей и, вероятно, большинство таймеров простоя).

private function userIdle(e:FlexEvent):void {
            idleCounter++;
            trace(idleCounter);
            if (idleCounter > 100) {
                seconds_since_idle += 10;
                idleCounter = 0;
                if (seconds_since_idle > 60) {
                    trace("idle longer than 1 minute");
                    if (timer.hasEventListener(TimerEvent.TIMER)) {
                        timer.removeEventListener(TimerEvent.TIMER, timer_short);
                    }
                }
                if (seconds_since_idle > 180) {
                    trace("idle longer than 3 minutes");
                    sysMan.removeEventListener(FlexEvent.IDLE, userIdle);
                    session.user = null;
                    currentState='Login';
                    Alert.show("You have been logged out due to inactivity.",
                        "Alert", 
                        Alert.OK);
                }
            } 
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...