Flex的4:idleCounter似乎有所改变 - 目前大多数网上的例子碎了! [英] Flex 4: idleCounter seems to have changed - most online examples now broken!

查看:195
本文介绍了Flex的4:idleCounter似乎有所改变 - 目前大多数网上的例子碎了!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有什么,我认为这是一个简单的问题就在这里。我打电话一个基本的计时器上登录成功,随后通过设置一对夫妇处理程序,刷新时间表的一些数据。 (我还没有粘贴的定时器处理程序,因为我不认为它很重要他们做什么)无论如何,我想关闭这些定时刷新,当应用程序处于闲置状态,但是这样的:

 如果(e.currentTarget.mx_internal :: idleCounter> 15000){
 

永远不会被触发。我presume这是因为不同的方式的Flex 4正在处理这些对象,但我无法找到它的文档中的任意位置。搜索idleCounter出现空白,甚至。

 保护功能getUserByIDResult_resultHandler(事件:的ResultEvent):无效
{

    VAR SYSMAN:ISystemManager包含= FlexGlobals.topLevelApplication.systemManager;
    sysMan.addEventListener(FlexEvent.IDLE,userIdle);

    session.user = event.result的用户;

    定时器=新的定时器(5000);
    timer.addEventListener(TimerEvent.TIMER,timer_short);
    timer.start();

    定时器2 =新的定时器(10000);
    timer2.addEventListener(TimerEvent.TIMER,timer_long);
    timer2.start();

    currentState的=主;
}


私有函数userIdle(E:FlexEvent):无效{
    如果(e.currentTarget.mx_internal :: idleCounter> 15000){
        timer.stop();
        timer2.stop();
    }
    如果(e.currentTarget.mx_internal :: idleCounter< 15000){
        如果(timer.running == FALSE){
            timer.start();
            timer2.start();
        }
    }
}
 

解决方案

所以经过一些调查研究,我决定空闲事件是真正前进的道路。这里有一个简单的例子(注意时机是近似,这是我的目的确定,可能是最空闲的定时器)。

 私有函数userIdle(E:FlexEvent):无效{
            idleCounter ++;
            跟踪(idleCounter);
            如果(idleCounter→100){
                seconds_since_idle + = 10;
                idleCounter = 0;
                如果(seconds_since_idle→60){
                    追踪(空闲超过1分钟);
                    如果(timer.hasEventListener(TimerEvent.TIMER)){
                        timer.removeEventListener(TimerEvent.TIMER,timer_short);
                    }
                }
                如果(seconds_since_idle> 180){
                    跟踪(空转3分钟以内);
                    sysMan.removeEventListener(FlexEvent.IDLE,userIdle);
                    session.user = NULL;
                    currentState的=登陆;
                    Alert.show(你已被注销因不活动。
                        警报,
                        Alert.OK);
                }
            }
        }
 

I have what I THINK is a simple problem here. I'm calling a basic timer on login success, followed by setting up a couple handlers to refresh some data on a schedule. (I haven't pasted the timer handlers cause i don't think it matters what they do) Anyway, I'm trying to shut OFF those timed refreshes when the app is IDLE, but this:

    if (e.currentTarget.mx_internal::idleCounter > 15000) {

Never gets triggered. I presume it's because of the different way Flex 4 is handling these objects, but I can't find it anywhere in the documentation. Searching for idleCounter comes up empty, even.

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();
        }
    }
}

解决方案

So after some more research, I decided that the Idle event was really the way forward. Here's a simplified example (note the timing is "approximate", which is OK for my purposes, and probably most idle timers).

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);
                }
            } 
        }

这篇关于Flex的4:idleCounter似乎有所改变 - 目前大多数网上的例子碎了!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆