Flex的4:idleCounter似乎有所改变 - 目前大多数网上的例子碎了! [英] Flex 4: idleCounter seems to have changed - most online examples now broken!
问题描述
我有什么,我认为这是一个简单的问题就在这里。我打电话一个基本的计时器上登录成功,随后通过设置一对夫妇处理程序,刷新时间表的一些数据。 (我还没有粘贴的定时器处理程序,因为我不认为它很重要他们做什么)无论如何,我想关闭这些定时刷新,当应用程序处于闲置状态,但是这样的:
如果(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屋!