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);
});

浙公网安备 33010602011771号