Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 显示用户无法关闭的警报,在事件发生时自动关闭_Apache Flex_Actionscript - Fatal编程技术网

Apache flex 显示用户无法关闭的警报,在事件发生时自动关闭

Apache flex 显示用户无法关闭的警报,在事件发生时自动关闭,apache-flex,actionscript,Apache Flex,Actionscript,我有一个Flex应用程序,当用户单击按钮时,它会向数据库发送查询。由于查询可能很繁重,可能需要一分钟的时间,因此我想显示一个警报,只有在事件从数据库返回后才会关闭(用户自己无法关闭)。在Flex中可能吗?我该怎么做 我有函数sendQuery()和dataEventHandler()。我想我需要在sendQuery()中输入代码以显示警报,在dataEventHandler()中输入代码以在数据来自数据库后关闭警报,但是如何让用户“无法关闭”警报?内置的Flex警报类将始终具有某种类型的关闭按钮

我有一个Flex应用程序,当用户单击按钮时,它会向数据库发送查询。由于查询可能很繁重,可能需要一分钟的时间,因此我想显示一个警报,只有在事件从数据库返回后才会关闭(用户自己无法关闭)。在Flex中可能吗?我该怎么做


我有函数sendQuery()和dataEventHandler()。我想我需要在sendQuery()中输入代码以显示警报,在dataEventHandler()中输入代码以在数据来自数据库后关闭警报,但是如何让用户“无法关闭”警报?

内置的Flex警报类将始终具有某种类型的关闭按钮


但是,没有理由不能创建自己的组件;然后使用PopUpManager打开和关闭它

以下代码可能会帮助您…(解决方案之一…) 您可以发现我已经制定了解决方案1和解决方案2…您可以使用其中任何一个,第三个解决方案是创建您自己的自定义组件。 请查找下面的代码…。您可以使用以下逻辑来解决您的问题。。 使用计时器检查是否接收到数据,或者可以分派自定义事件并调用UpdateAllertPosition函数

希望有助于:-

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               >
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.events.CloseEvent;
            import mx.managers.PopUpManager;

            private var minuteTimer:Timer;
            private var alert:Alert;

            private var displayInitialText:String = "Data Not Received, Please wait...."; 
            private var displayDataReveivedText:String = "Data Received...";

            private function timerInit():void
            {
                //Logic to check if data Received.
                minuteTimer = new Timer(3000);
                minuteTimer.addEventListener(TimerEvent.TIMER, updateAlertPosition);
                minuteTimer.start(); 
            }

            private function updateAlertPosition(event:Event = null):void {
                minuteTimer.stop();
                //Solution 1
                //add your flag here if y you want to check if data is received or not
                //if(Data Received)
                alert.mx_internal::alertForm.mx_internal::buttons[0].enabled = true;
                alert.mx_internal::alertForm.mx_internal::buttons[1].enabled = true;
                alert.mx_internal::alertForm.mx_internal::textField.text = displayDataReveivedText;
                //Solution 2
                //alert.enabled = true;
                //If you want to remove it automatically
                //closeAutomatically();
            }

            private function closeAutomatically():void
            {
                PopUpManager.removePopUp(alert);
            }

            private function clickHandler():void
            {
                //Start Timer
                timerInit();
                //Solution 1
                alert = Alert.show(displayInitialText, "Alert", Alert.OK|Alert.CANCEL,this,alertCloseHandler);
                alert.mx_internal::alertForm.mx_internal::buttons[0].enabled = false;
                alert.mx_internal::alertForm.mx_internal::buttons[1].enabled = false;
                //Solution 2
                //alert.enabled = false;
            }

            private function alertCloseHandler(event:CloseEvent):void
            {
                if(event.detail == Alert.CANCEL)
                {
                    //Some Code on close
                }
                else
                {
                    //Some Code on OK
                }

            }
        ]]>
    </fx:Script>

    <s:Button label="Show Alert" x="100" y="100" click="clickHandler()"/>
</s:Application>


制作一个覆盖整个应用程序的0-0.2 alpha形状(可能您需要监听resizeevents),并在其中间添加一个带有消息的自定义面板。

您可以创建一个自定义警报,然后:

  • 显示警惕
  • 禁用应用程序
  • 隐藏警报
  • 启用应用程序
  • 警报示例:

    <?xml version="1.0" encoding="utf-8"?>
    <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
             xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"
             creationComplete="onCreationComplete(event)">
    
        <s:Rect>
            <s:fill>
                <s:SolidColor color="0xFFFFFF"/>
            </s:fill>
            <s:stroke>
                <s:SolidColorStroke />
            </s:stroke>
        </s:Rect>
    
        <s:Label text="Please Wait..."/>
    
        <fx:Script>
            <![CDATA[
                import mx.core.FlexGlobals;
                import mx.events.FlexEvent;
                import mx.managers.PopUpManager;
                public static function show():void
                {
                    PopUpManager.createPopUp(FlexGlobals.topLevelApplication);      
                }
    
                public static function hide():void
                {
                    PopUpManager.removePopUp(this);
                    FlexGlobals.topLevelApplication.enabled = true;
                }
    
                protected function onCreationComplete(event:FlexEvent):void
                {
                    PopUpManager.centerPopUp(this);
                    FlexGlobals.topLevelApplication.enabled = false;
                }
            ]]>
        </fx:Script>
    </s:Group>
    

    @Alex,我使用了你的代码,但修改了一点,因为有一些错误:

    <?xml version="1.0" encoding="utf-8"?>
    <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
             xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:mx="library://ns.adobe.com/flex/mx"
             creationComplete="creationCompleteHandler()" width="100%" height="100%">
        <fx:Script>
            <![CDATA[
    
                import mx.core.FlexGlobals;
                import mx.core.UIComponent;
                import mx.managers.PopUpManager;
    
                ///////////////////////////////////////
                //// public functions - my group is ImageViewer.mxml component
    
    
                public static function show():ImageViewer {
                    return PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, ImageViewer) as ImageViewer;
                }
    
                public function hide():void {
                    PopUpManager.removePopUp(this);
                    FlexGlobals.topLevelApplication.enabled = true;
                }
    
    
                ////////////////////////////
                //// component events
    
                private function creationCompleteHandler():void {
                    PopUpManager.centerPopUp(this);
                    FlexGlobals.topLevelApplication.enabled = false;
                }
                ]]>
        </fx:Script>
    </s:Group>
    

    我赞成。创建自己的弹出控件。你甚至可以在里面添加一个不确定的进度条来制作一个漂亮的动画。使用PopupManager显示/取消控制。
    <?xml version="1.0" encoding="utf-8"?>
    <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
             xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:mx="library://ns.adobe.com/flex/mx"
             creationComplete="creationCompleteHandler()" width="100%" height="100%">
        <fx:Script>
            <![CDATA[
    
                import mx.core.FlexGlobals;
                import mx.core.UIComponent;
                import mx.managers.PopUpManager;
    
                ///////////////////////////////////////
                //// public functions - my group is ImageViewer.mxml component
    
    
                public static function show():ImageViewer {
                    return PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, ImageViewer) as ImageViewer;
                }
    
                public function hide():void {
                    PopUpManager.removePopUp(this);
                    FlexGlobals.topLevelApplication.enabled = true;
                }
    
    
                ////////////////////////////
                //// component events
    
                private function creationCompleteHandler():void {
                    PopUpManager.centerPopUp(this);
                    FlexGlobals.topLevelApplication.enabled = false;
                }
                ]]>
        </fx:Script>
    </s:Group>
    
    var imageviewer:ImageViewer = ImageViewer.show();
    //imageviewer.imageURL = _value_dto.value;