Flex:如何在导航到任何其他页面之前提示警报

时间:2012-06-25 10:38:35

标签: actionscript-3 flex flex3 flex4.5

如何在突出显示/导航到其他面板/页面之前询问用户确认?

我的屏幕上有几个面板。每个面板都有许多控件。我想用Ok和Cancel按钮提示一个消息框(或警告),并在用户点击另一个面板时进行确认。

如果用户点击“确定”按钮,则导航到另一个面板/页面。 如果用户点击“取消”按钮,则删除警报并将焦点转移到同一个面板。

目前,我已使用面板的focus_out事件(focusOutHandler(event:FocusEvent))实现了此功能。我点击另一个面板上的按钮,现在我得到警报,但是当我在警报中单击“确定”时,没有任何事情发生(按钮点击是事件未被触发)

提前致谢

2 个答案:

答案 0 :(得分:0)

根据它的声音,你想要根据点击警报上的哪个按钮做出反应?

如果是这种情况,请使用Alert class中的内置关闭处理程序。

Alert类有一个静态方法show,带有以下签名:

public static function show(text:String = "", title:String = "", flags:uint = 0x4, parent:Sprite = null, closeHandler:Function = null, iconClass:Class = null, defaultButtonFlag:uint = 0x4, moduleFactory:IFlexModuleFactory = null):Alert

通过flags参数

中的管道运算符添加两个标志

Alert.OK || Alert.CANCEL然后在closeHandler参数中添加关闭处理程序,您可以检查单击了哪个按钮并做出相应的反应。

这样的事情:

提醒: Alert.show("Alert Title","Would you like to proceed?",Alert.OK || Alert.CANCEL,this,onClose)

onClose函数:

private function onClose(event:CloseEvent)
{
    if (eventObj.detail==Alert.OK) 
    {
      //proceed
    }
    else
    {
      //cancel operation
    }
}

答案 1 :(得分:0)

根据你对James发表的评论,我发帖子,不确定你是否也在寻找相同的内容: - 希望下面的代码可能会给你一些想法。

<?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;

            private var storeNextFocusID:String = "first";
            private var storePreviousFocusID:String = "first";

            private function firstFocus():void
            {
                first.setFocus();   
                storePreviousFocusID = first.name;
            }

            private function showFirstTimeAlert(event:MouseEvent):void
            {
                if(event.currentTarget.name != storePreviousFocusID)
                {
                    Alert.show("Do you want to change Tab?","Alert",Alert.OK|Alert.CANCEL,null,closeHandler)
                    storeNextFocusID = event.currentTarget.name;
                }
            }

            private function closeHandler(event:CloseEvent):void
            {
                if(event.detail == Alert.OK)
                {
                    var focusCont:HGroup = mainContainer.getChildByName(storeNextFocusID) as HGroup;
                    focusCont.setFocus();
                    storePreviousFocusID = storeNextFocusID;
                } else
                {

                } 
            }
        ]]>
    </fx:Script>
    <s:VGroup id="mainContainer" x="50" y="50" width="400" height="300" creationComplete="firstFocus()">
        <s:HGroup  id="first" name="first" width="100%" height="100%" click="showFirstTimeAlert(event)">
            <mx:TabNavigator  width="100%" height="100%">
                <mx:VBox label="left">
                    <mx:Label text="labelPlacement = 'left'" />
                </mx:VBox>
                <mx:VBox label="right">
                    <mx:Label text="labelPlacement = 'right'" />
                </mx:VBox>
            </mx:TabNavigator>
            <s:Panel  width="100%" height="100%">
            </s:Panel>
        </s:HGroup>

        <s:HGroup  id="second" name="second" width="100%" height="100%"  click="showFirstTimeAlert(event)">
            <mx:TabNavigator width="100%" height="100%">
                <mx:VBox label="top">
                    <mx:Label text="labelPlacement = 'top'" />
                </mx:VBox>
                <mx:VBox label="bottom">
                    <mx:Label text="labelPlacement = 'bottom'" />
                </mx:VBox>
            </mx:TabNavigator>
            <s:Panel  width="100%" height="100%">
            </s:Panel>
        </s:HGroup>

    </s:VGroup>

</s:Application>