说明:

原生的 Alert.show 参数,要显示的按钮你只能 Alert.OK | Alert.Cancel 这样;

自定义 Zlert 参数跟原生的 差不多,按钮写法是这样写的: {"btnId":"确定", "btnId2":"其他按钮名称"}

ZlertWindow.mxml: com/components

<?xml version="1.0" encoding="utf-8"?>
<mx: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"
creationComplete="init(event)"
width="300" creationPolicy="all">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<s:Fade id="fadeIn" alphaFrom="0" alphaTo="1" duration="1000" />
<s:Fade id="fadeOut" alphaFrom="1" alphaTo="0" duration="2500" />
</fx:Declarations> <fx:Script>
<![CDATA[
import com.events.ZlertedEvent; import mx.events.FlexEvent; import spark.components.Button; public var succFunc:Function;
public var btnsJson:Object = null; public var message:String ; [Bindable]
public var zicon:Object; private function init(event:FlexEvent):void {
initForm();
} public function initForm():void {
var that:Sprite = this;
for (var key:String in btnsJson) {
var btn:Button = new Button();
btn.id = key;
btn.label = btnsJson[key];
btn.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void {
var _btn:Button = event.currentTarget as Button;
if (succFunc) {
succFunc(_btn.id);
} var altEvt:ZlertedEvent = new ZlertedEvent(ZlertedEvent.CLOSE);
that.dispatchEvent(altEvt);
}); AltForm.addElement(btn);
} var cancelBtn:Button = new Button();
cancelBtn.id="cclBtn";
cancelBtn.label = "取消";
cancelBtn.addEventListener(MouseEvent.CLICK, function(event:MouseEvent){
var altEvt:ZlertedEvent = new ZlertedEvent(ZlertedEvent.CLOSE);
that.dispatchEvent(altEvt);
}); AltForm.addElement(cancelBtn);
} ]]>
</fx:Script> <s:VGroup width="100%" height="100%">
<s:HGroup width="100%" height="100%" horizontalCenter="0" horizontalAlign="left">
<mx:Grid horizontalCenter="0" width="100%">
<mx:GridRow>
<mx:GridItem width="40" verticalAlign="middle" horizontalAlign="center">
<s:Group><s:BitmapImage source="{zicon}" id="iconOn" /></s:Group>
</mx:GridItem>
<mx:GridItem paddingTop="8">
<s:Label text="{message}" verticalAlign="justify" fontSize="14" />
</mx:GridItem>
</mx:GridRow>
</mx:Grid>
</s:HGroup> <s:HGroup id="AltForm" width="100%" height="30" horizontalCenter="0" horizontalAlign="center"> </s:HGroup>
</s:VGroup> </mx:TitleWindow>

ZlertedEvent.as: com/events

package com.events
{
import flash.events.Event; public class ZlertedEvent extends Event
{
public static const CLOSE:String = "close";
public function ZlertedEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}

主组件类Zlert.as

package com.command
{
import flash.display.Sprite;
import flash.events.EventPhase; import com.components.ZlertWindow;
import com.events.ZlertedEvent; import mx.controls.Alert;
import mx.core.Application;
import mx.core.FlexGlobals;
import mx.events.FlexEvent;
import mx.managers.ISystemManager;
import mx.managers.PopUpManager; public class Zlert
{
[Embed('assets/skins/alert/tip_question.png')]
private static var ICON_QUESTION:Class;
private static var parent:Sprite public function Zlert()
{
super();
} public static function show(msg:String, title:String = "确定", sprite:Sprite = null, btnsJson:Object = null, cancelHandler:Function = null) : void {
trace("asdfa"); var modal:Boolean = true; parent = sprite;
if (!parent)
{
var sm:ISystemManager = ISystemManager(FlexGlobals.topLevelApplication.systemManager);
// no types so no dependencies
var mp:Object = sm.getImplementation("mx.managers::IMarshalSystemManager");
if (mp && mp.useSWFBridge())
parent = Sprite(sm.getSandboxRoot());
else
parent = Sprite(FlexGlobals.topLevelApplication);
} var alt:ZlertWindow = new ZlertWindow();
alt.title = title;
alt.message = msg;
alt.btnsJson = btnsJson;
alt.zicon = ICON_QUESTION;
alt.succFunc = cancelHandler; alt.addEventListener(ZlertedEvent.CLOSE, function():void{
PopUpManager.removePopUp(alt);
}); PopUpManager.addPopUp(alt, parent, modal);
PopUpManager.centerPopUp(alt);
} }
}

使用方法:

Zlert.show("提示消息?","标题", this, {"btnId1":"确定", "btnId2" : "按钮2"}, function(key:String):void {
if (key != "btnId1") {
//...
}
});

Flex 自定义 Zlert 组件!的更多相关文章

  1. Flex自定义组件开发之日周月日期选择日历控件

    原文:Flex自定义组件开发之日周月日期选择日历控件         使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的 ...

  2. Flex自定义组件、皮肤,并调用

    标签:Flex  自定义组件  自定义皮肤  主应用调用模块 本程序样例学习自flex 实战教程.但因原教程代码不全,且根据个人需求有更改. 1文件列表 自定义as类Reveal.as,该类实现组件的 ...

  3. flex 自定义组件的编写

    使用flex也很久了,也改过别人写的flex自定义组件,但是就是没有系统的研究下flex组件的编写步骤,和要注意的东西,在这里我参照一本书中的例子,好好的理解下,也为了巩固下自己对flex的理解! 1 ...

  4. Flex自定义组件开发 - jackyWHJ

    一般情况下需要组件重写都是由于以下2个原因: 1.在FLEX已有组件无法满足业务需求,或是需要更改其可视化外观等特性时,直接进行继承扩展. 2.为了模块化设计或进一步重用,需要对FLEX组件进行组合. ...

  5. Flex自定义组件开发

    一般情况下需要组件重写都是由于以下2个原因:1.在FLEX已有组件无法满足业务需求,或是需要更改其可视化外观等特性时,直接进行继承扩展.2.为了模块化设计或进一步重用,需要对FLEX组件进行组合.而F ...

  6. 微信小程序自定义音频组件,自定义滚动条,单曲循环,循环播放

    小程序自定义音频组件,带滚动条 摘要:首先自定义音频组件,是因为产品有这样的需求,需要如下样式的 而微信小程序API给我们提供的就是这样的 而且产品需要小程序有后台播放功能,所以我们不考虑小程序的 a ...

  7. weex 项目开发(五)自定义 过滤函数 和 混合 及 自定义 Header 组件

    1.自定义  过滤函数 src / filters / index.js /** * 自定义 过滤函数 */ export function host (url) { if (!url) return ...

  8. weex 项目开发(四)项目框架搭建 及 自定义 TabBar 组件

    1.安装  路由模块  及  状态管理模块 npm install vue-router --save npm install vuex --save 2.自定义  TabBar  组件 src / ...

  9. 自定义 MessageBox 组件

    效果: 公共组件页面: js部分: <script>   export default {     props: {       title: {         type: String ...

随机推荐

  1. pyinstaller将python编写的打卡程序打包成exe

    编写了一个简易的定时提醒下班打卡程序,python代码如下: #coding:utf-8 import time import datetime from tkMessageBox import * ...

  2. 基于tensorflow 1.x 的检索机器人chatbot-retrieval

    Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...

  3. 统计学习方法c++实现之六 支持向量机(SVM)及SMO算法

    前言 支持向量机(SVM)是一种很重要的机器学习分类算法,本身是一种线性分类算法,但是由于加入了核技巧,使得SVM也可以进行非线性数据的分类:SVM本来是一种二分类分类器,但是可以扩展到多分类,本篇不 ...

  4. 1083. List Grades (25)-简单的排序

    给定区间[L,R],给出在这区间之内的学生,并且按照他们的成绩非升序的顺序输出. #include <iostream> #include <cstdio> #include ...

  5. Practice1小学四则运算(改进)

    #include<stdio.h> #include<stdlib.h> #include<time.h> void srand(unsigned);//随机生成不 ...

  6. Github作为图床的一个小坑

    Github作为图床的一个小坑 前言 听了少铭同学建议把github作为图床,结果遇到了一个小坑,总是显示不出来图片. 问题描述与解决 形如下的链接是显示不出来的: https://github.co ...

  7. ipmitool+python应用处理大量带外地址

    ipmitool 是一种可用在 linux 系统下的命令行方式的 ipmi 平台管理工具,它支持 ipmi 1.5 规范(最新的规范为 ipmi 2.0),通过它可以实现获取传感器的信息.显示系统日志 ...

  8. thinkphp5 速查表

    本速查表里的类都是think为命名空间的,实例化时省去了  use.用的时候注意. 本速查表里会有四种方法的调用: 公有方法 $class = new Class();  $class->foo ...

  9. 随web应用启动而自启动的后台线程

    当前遇到一个需求: 需要在web应用启动的时候就启动一个线程定时的来做某项工作. 有两种解决方法: 1.增加一个监听器Listener来实现相关功能. 2.增加一个随项目启动的servlet来实现相关 ...

  10. SparkException: Master removed our application

    come from https://stackoverflow.com/questions/32245498/sparkexception-master-removed-our-application ...