`
darrenzhu
  • 浏览: 804261 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Flex可携带数据的Aler组件(DataCarriableAlert)

阅读更多
package component.alert
{
	import flash.display.Sprite;
	import flash.events.EventPhase;
	import mx.controls.Alert;
	import mx.core.FlexGlobals;
	import mx.core.IFlexDisplayObject;
	import mx.core.IFlexModule;
	import mx.core.IFlexModuleFactory;
	import mx.core.UIComponent;
	import mx.events.CloseEvent;
	import mx.events.FlexEvent;
	import mx.managers.ISystemManager;
	import mx.managers.PopUpManager;
	
	/**
	 * Alert control provided by flex sdk is not supportted to carry data in close handler, only a predefined closeEvent object,</br>
	 * you can use DataCarriableAlert to resolve this problem, you can obtain both the closeEvent object and your parameters.
	 * Usage example:</br>
	 * 	DataCarriableAlert.show("Are you sure to delete the selected trades?","Message",Alert.YES|Alert.NO,this,deletionConfirm,[2]);</br>
	 *	
	 * </br>private function deletionConfirm(e:CloseEvent,intv:int):void{</br>
	 * &nbsp;&nbsp;//intv is 2 which was passed by above code</br>
	 *	&nbsp;&nbsp;if(e.detail==Alert.NO){</br>
	 *	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;</br>
	 *	&nbsp;&nbsp;&nbsp;}</br>
	 *	}</br>
	 */ 
	public class DataCarriableAlert extends Alert
	{
		public function DataCarriableAlert()
		{
			super();
		}

		public static function show(text:String = "", title:String = "",
									flags:uint = 0x4 /* Alert.OK */, 
									parent:Sprite = null, 
									closeHandler:Function = null, 
									closeHandlerParameters:Array=null,
									iconClass:Class = null, 
									defaultButtonFlag:uint = 0x4 /* Alert.OK */,
									moduleFactory:IFlexModuleFactory = null):Alert
		{
			var modal:Boolean = (flags & Alert.NONMODAL) ? false : true;
			
			if (!parent)
			{
				var sm:ISystemManager = ISystemManager(FlexGlobals.topLevelApplication.systemManager);
				// no types so no dependencies
				var mp:Object = sm.getImplementation("mx.managers.IMarshallPlanSystemManager");
				if (mp && mp.useSWFBridge())
					parent = Sprite(sm.getSandboxRoot());
				else
					parent = Sprite(FlexGlobals.topLevelApplication);
			}
			
			var alert:Alert = new Alert();
			
			if (flags & Alert.OK||
				flags & Alert.CANCEL ||
				flags & Alert.YES ||
				flags & Alert.NO)
			{
				alert.buttonFlags = flags;
			}
			
			if (defaultButtonFlag == Alert.OK ||
				defaultButtonFlag == Alert.CANCEL ||
				defaultButtonFlag == Alert.YES ||
				defaultButtonFlag == Alert.NO)
			{
				alert.defaultButtonFlag = defaultButtonFlag;
			}
			
			alert.text = text;
			alert.title = title;
			alert.iconClass = iconClass;
			
			/********************************override part start****************************************************************/
			if (closeHandler != null){
				alert.addEventListener(CloseEvent.CLOSE, 
					function(closeEvent:CloseEvent):void{
						var parameters:Array=[];
						parameters.push(closeEvent);
						if(closeHandlerParameters!=null && closeHandlerParameters.length>0){
							for each(var p:Object in closeHandlerParameters){
								parameters.push(p);
							}
						}
						closeHandler.apply(alert,parameters);
					}
				)
			}
			/********************************override part end*******************************************************************/
				
			
			// Setting a module factory allows the correct embedded font to be found.
			if (moduleFactory)
				alert.moduleFactory = moduleFactory;    
			else if (parent is IFlexModule)
				alert.moduleFactory = IFlexModule(parent).moduleFactory;
			else
			{
				if (parent is IFlexModuleFactory)
					alert.moduleFactory = IFlexModuleFactory(parent);
				else                
					alert.moduleFactory = FlexGlobals.topLevelApplication.moduleFactory;
				
				// also set document if parent isn't a UIComponent
				if (!parent is UIComponent)
					alert.document = FlexGlobals.topLevelApplication.document;
			}
			
			alert.addEventListener(FlexEvent.CREATION_COMPLETE, static_creationCompleteHandler);
			PopUpManager.addPopUp(alert, parent, modal);
			
			return alert;
		}
		
		private static function static_creationCompleteHandler(event:FlexEvent):void
		{
			if (event.target is IFlexDisplayObject && event.eventPhase == EventPhase.AT_TARGET)
			{
				var alert:Alert = Alert(event.target);
				alert.removeEventListener(FlexEvent.CREATION_COMPLETE, static_creationCompleteHandler);
				
				alert.setActualSize(alert.getExplicitOrMeasuredWidth(),
					alert.getExplicitOrMeasuredHeight());
				PopUpManager.centerPopUp(IFlexDisplayObject(alert));
			}
		}
	}
}
分享到:
评论

相关推荐

    TMC Aler C 标准

    首先,TMC(Traffic Message Channel)是通过无线电数据系统(Radio Data System)传递的交通信息频道。它是一种广播系统,可以实时地为司机提供关于交通状况的信息,比如交通堵塞、事故、施工等。这些信息可以被...

    Aler_Covid19

    标题"Aler_Covid19"很可能是指一个与COVID-19相关的Java项目,可能是用于警报、追踪或者数据分析的软件。这个项目的描述很简洁,没有提供具体的功能或用途信息,但我们可以根据“Covid19”这个词来推测,它可能涉及...

    resize数据文件大小

    缩减数据文件大小,用于系统存储空间紧张的情况下,保证数据库正常运行 (分享以下内容旨在传递信息之用途 , 请在使用后及时完成评估并在24小时内删除 , 否则一切后果请您自负)

    wicket-js:wicket-js 使在 Wicket 组件和行为中编写和处理自定义 JavaScript 和 jQuery 变得容易

    Wicket JavaScript 和 jQuery wicket-js 使在组件和行为中编写和处理自定义 JavaScript 和变得容易。 它有助于将 Wicket Ajax Behavior 侦听器与实际客户端 UI 功能分开,同时保持与 ... return new JsCall ( " aler

    RTSPAllTheThings:不推荐使用的RTSP媒体服务器-使用github.comaler9rtsp-simple-server代替

    RTSP(Real-Time Streaming Protocol)是一种广泛用于视频流传输的协议,它允许客户端与服务器之间进行交互,实现实时音视频数据的传输。在本文中,我们将深入探讨RTSP媒体服务器,尤其是关于“RTSPAllTheThings”...

    rtmp server

    在这个场景中,我们讨论的是使用Golang语言实现的RTMP服务器,这允许开发人员利用Golang的并发性和性能优势来构建高效、可扩展的流媒体服务。 Golang是一种静态类型的编译语言,以其简洁的语法、高效的性能以及内置...

    moteview使用指南-中文版.pdf

    - **Tools&gt;Refresh View/Add Node/Program Mote/Aler**:刷新视图、添加节点、对节点编程及设置报警等。 综上所述,MoteView作为一款强大的无线Mesh网络管理工具,提供了全面的功能,让用户可以高效地管理、监控和...

    js提示框替代系统alert,自动关闭alert对话框的实现方法

    自己写了个alert提示框。因为系统alert在苹果手机微信中,提示时,顶部会显示网站地址。 同时其他后续操作需要在js中继续填写。因此简单用div写了一个alert提示框,并自动关闭。 效果图 css样式 ...

    moss中Service Unavailable的解决方法

    moss中Service Unavailable的解决方法,文件中列出了几种解决方式

    RACAlertAction:支持 ReactiveCocoa 的 UIAlertAction 子类

    RACAlertAction 支持 ReactiveCocoa 的 UIAlertAction 子类。 目的 iOS 8 引入了UIAlertController ,一个上面的抽象和UIAlertView替代品。 UIAlertController使用UIAlertAction实例来表示按钮(以及这些按钮的动作...

    Fragment后退栈和add,remove,replace的基本使用

    在Android应用开发中,Fragment是UI组件的一种,它允许我们在一个Activity中添加多个模块化的界面。Fragment的设计使得在平板电脑和手机等不同尺寸的屏幕上更好地布局和管理内容。本篇文章将详细探讨Fragment后退栈...

    用go语言实现的GB28181的服务端和客户端.zip

    GB28181是中国国家公共安全视频监控网络系统联网通信协议标准,它定义了服务端和客户端之间的数据传输、控制、管理和互操作规范。在这个项目中,开发者使用了Go语言来实现GB28181协议的两端——服务端和客户端。Go...

    goroslib:Go 编程语言的 ROS 客户端库

    机器人操作系统 (ROS) 是一个项目,它提供了一个规范,使多个程序随着时间的推移相互通信,交换带有主题、服务、动作和参数的结构化数据。 它旨在将无人地面车辆 (UGV) 和机器人中的传感器、算法和执行器连接起来,...

    JavaScript中的三种弹出框

    JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责处理客户端的交互和动态内容。...在现代Web开发中,通常推荐使用更灵活的模态组件和AJAX技术来实现类似的交互,以提供更好的可访问性和用户体验。

    layer.alert自定义关闭回调事件的方法

    layer是一个非常流行的轻量级、功能强大的前端弹层组件。它提供了多种类型的弹窗,如信息提示、确认对话框、模态对话框等。本文将详细介绍如何在layer.alert中自定义关闭回调事件,以实现更灵活的功能控制。 在...

    sd-alert-pipe:Star Destroyer库,用于与各种经纪人进行交互

    当前支持的经纪人:上面的每个模块都定义了一个服务,该服务包含各种用于从各个API提取数据的方法,通常用于特定的ZTF名称。安装在全新的virtualenv中, pip install -r requirements.txt用法在脚本中,从导入...

    jQuery实现html双向绑定功能示例

    本文实例讲述了jQuery实现html双向绑定功能。分享给大家供大家参考,具体如下: &lt;html&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;... aler

    Bootstrap 警告(Alerts)

    Bootstrap 警告(Alerts) 本章将讲解警告(Alerts)以及 Bootstrap 所提供的用于警告的 class。警告(Alerts)向用户...,并向其添加一个 .alert class 和四个上下文 class(即 .alert-success、.alert-info、.aler

    Bootstrap警告框(Alert)插件使用方法

    1、通过 data 属性:通过数据 API(Data API)添加可取消功能,只需要向关闭按钮添加 data-dismiss=”alert”,就会自动为警告框添加关闭功能。 ×  2、通过 JavaScript添加可取消功能: $(“.aler

    phpbb_vk_oauth:VK oAuth 登录 phpBB 3.1 扩展

    同时,为了保护用户数据的安全,应定期更新和审核你的VK应用权限设置,遵循数据隐私法规。 总结,"phpbb_vk_oauth"是phpBB 3.1论坛与VK OAuth整合的关键工具,它使得用户可以通过流行的俄罗斯社交网络VK方便地登录...

Global site tag (gtag.js) - Google Analytics