本文的Flex屏幕锁定是指用户只需执行了窗口的某个操作(如单击按钮等)之后,锁住屏幕确保用户无法进行任何操作,直到当前操作完成。如下图所示即为本文的一个窗口。
为什么需要锁屏:
本身flex远程调用的组件如remoteobject就支持光标的showbusy属性设置功能,当其为true时,执行远程调用操作光标就会变成等待时钟,告知用户目前系统正在执行操作,请稍等。但是,纵然光标已变成等待时钟,用户仍可以单击其它按钮触发其它操作。实际业务中,有很多操作(比如大数据量查询)在当前操作没完成之时是不允许执行其它操作的。如图1所示,当用户执行了查询操作之后,即不可进行其它操作,除非当前查询已完成。这时flex提供的光标showbusy属性设置已不能满足我们的需求,为此需要屏幕锁定,如下图所示。
当执行查询操作时,弹出操作提示信息框,然后窗口所有操作都不能进行,除非查询完成,弹出的操作提示信息框会消失,用户方可进行其它操作。
如何实现:
实现原理很简单,执行查询操作之时即让其弹出一个有模式的弹出窗口,当操作完成之时将弹出窗口移除即可。如果追求UI效果的话,请处理弹出窗口的UI即可。
1) 在执行查询操作时弹出弹出对话框,下述为简单demo
// getAllUserResult为callresponder,testUserService对应为blazeds远程的一个服务
getAllUserResult.token = testUserService.getAllUser();
PopUpManager.addPopUp(window,this,true);
window.width=180;
window.height=60;
window.title="系统忙,请稍等。。。";
PopUpManager.centerPopUp(window);
2) 在callresponder的result事件和fault事件中移除弹出对话框
protected function unlock():void{
PopUpManager.removePopUp(window);
}
3) 如此一个简单的屏幕锁定即实现,当然为了适应方便、和UI美观,建议将屏幕锁定封装成一个组件,加点动画等待效果。