flex4中实现类似javascript中window.prompt的效果
javascript中有这么一个功能,弹出来一个对话框,允许输入文字内容,点击对话框的“确定”按钮,关闭对话框,并且把值传递过去。
我参考了这篇文章:http://adyhpq.blog.163.com/blog/static/3866700200822073252221/
不过我实现的方式不同,我是在点击“确定”按钮的时候,生成一个自定义事件,然后再监控这个事件,下面是代码部分:
先建立了一个MXML组件,继承的是TitleWindow类:
<?xml version="1.0" encoding="utf-8"?> <s:TitleWindow 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="320" height="136" dropShadowVisible="false" keyDown="titlewindow1_keyDownHandler(event)" creationComplete="titlewindow1_creationCompleteHandler(event)"> <s:layout> <s:BasicLayout/> </s:layout> <fx:Script> <![CDATA[ import mx.events.CloseEvent; import mx.events.FlexEvent; import mx.managers.PopUpManager; import spark.components.Application; public static const PROMPT_OK:String = "ok"; public var msg:String = ""; public var text:String = ""; protected function ok_clickHandler(event:MouseEvent):void // 确定按钮点击时执行 { text = textInput.text; dispatchEvent(new Event(PromptWindow.PROMPT_OK)); PopUpManager.removePopUp(this); } protected function cancel_clickHandler(event:MouseEvent):void // 取消按钮点击时执行 { PopUpManager.removePopUp(this); } protected function titlewindow1_keyDownHandler(event:KeyboardEvent):void //按键Esc时执行 { if(event.keyCode == Keyboard.ESCAPE) { PopUpManager.removePopUp(this); } } //弹出prompt对话框,第1个参数是指窗体对象,第2个参数是指默认显示标题内容,第3个参数是指默认显示文字内容,第4个参数是指默认显示输入框里内容 public static function prompt(win:*,defaultTitle:String="",defaultMsg:String="",defaultText:String=""):PromptWindow { var promptWindow:PromptWindow = new PromptWindow(); promptWindow.x = 100; promptWindow.y = 150; promptWindow.title = defaultTitle; promptWindow.msg = defaultMsg; promptWindow.text = defaultText; promptWindow.addEventListener(CloseEvent.CLOSE,function(e:CloseEvent):void{ PopUpManager.removePopUp(promptWindow); }); PopUpManager.addPopUp(promptWindow,win,true); return promptWindow; } protected function titlewindow1_creationCompleteHandler(event:FlexEvent):void { this.title = title; msgLabel.text = msg; textInput.text = text; } ]]> </fx:Script> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <s:Label x="48" y="10" width="234" id="msgLabel"/> <s:TextInput x="49" y="36" width="232" id="textInput"/> <s:controlBarContent> <s:Button x="83" y="72" label="确定" click="ok_clickHandler(event)"/> <s:Button x="186" y="72" label="取消" click="cancel_clickHandler(event)"/> </s:controlBarContent> <s:controlBarLayout> <s:HorizontalLayout paddingTop="6" paddingBottom="6" paddingRight="6" horizontalAlign="right" verticalAlign="middle" /> </s:controlBarLayout> </s:TitleWindow>
下面可以在Flex程序中调用这个组件:
var prompt:PromptWindow = PromptWindow.prompt(this,"title","msg","text");
prompt.addEventListener(PromptWindow.PROMPT_OK,function():void{ Alert.show(prompt.text); });