- 浏览: 1006099 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (445)
- Java (22)
- J2EE (18)
- Flex (102)
- Flex-blazeds (1)
- Flex-FABridge (2)
- Flex4 (3)
- CheckStyle (2)
- PowerDesigner (0)
- POI (2)
- Java2Word (2)
- 杂项 (15)
- 日记 (3)
- 数据库-oracle (41)
- 数据库-SQLServer (7)
- 中间件 (1)
- 英语 (8)
- C# (43)
- ASP.net (72)
- ASP.net MVC (28)
- 微软-Entity Framework (19)
- JavaScript (22)
- JQuery (31)
- EasyUI (3)
- VS2010 (4)
- CVS (1)
- Tomcat (3)
- Linux (1)
- 遗留问题 (1)
- iphone (1)
- MAC (0)
- 系统 (2)
- Web Service (4)
- Cache Manager (1)
- PMP (1)
- WCF (10)
- BootstrapJs (1)
- Web API (6)
- Go语言 (0)
- 网络协议 (2)
- Redis (10)
- RabbitMQ (10)
- Git (3)
- Kafka (5)
- ELK (5)
- Nginx (3)
- 测试 (2)
最新评论
-
ygm0720:
Table行拖拽自己实现 -
程乐平:
Flex4开发视频教程(27集)下载http://bbs.it ...
Flex4教程 -
liuweihug:
Jquery+asp.net 后台数据传到前台js进行解析的办 ...
AJAX $.toJSON的用法或把数组转换成json类型 -
weilikk:
谢谢谢谢!!
javascript IE下不能用 trim函数解决方法 -
gxz1989611:
vigiles 写道请问楼主:[Fault] exceptio ...
blazeds推送技术至Flex
Flex应用开发过程中如需要灵活的在不同组件(如A与B,父与子)之间响应事件,传递参数等功能时就会使用自定义事件(Event)机制,下面通过一个事例分七步,通过自定义Event和EventDispatcher两种机制实现事件交互和参数传递;
事例描述: 有一个父亲“parentApp.mxml”有两个儿子“comBrotherA.mxml”和"comBrotherB.mxml",新年
降至,两个儿子为表孝心分别给他们老爸存入(事件)一笔过节费(事件参数),并通知老爸我存钱进去了,老爸在收到两个儿子的钱后汇总后同时告诉(事件)两
个儿子钱我已收到总数(事件参数)是多少...
1、第一步:引入自定义注册事件参数传递扩展类(来自网络)
view plaincopy to clipboardprint?
package myeventhelper
{
//自定义注册事件参数传递扩展类
public class EventArgExtend
{
public function EventArgExtend()
{
}
public static function create(f:Function,...arg):Function //动态参数创建
{
var F:Boolean = false;
var _f:Function = function(e:*,..._arg)
{
_arg = arg;
if(!F)
{
F = true;
_arg.unshift(e);
}
f.apply(null,_arg);
};
return _f;
}
public static function toString():String
{
return "Class JEventDelegate";
}
}
}
package myeventhelper
{
//自定义注册事件参数传递扩展类
public class EventArgExtend
{
public function EventArgExtend()
{
}
public static function create(f:Function,...arg):Function //动态参数创建
{
var F:Boolean = false;
var _f:Function = function(e:*,..._arg)
{
_arg = arg;
if(!F)
{
F = true;
_arg.unshift(e);
}
f.apply(null,_arg);
};
return _f;
}
public static function toString():String
{
return "Class JEventDelegate";
}
}
}
2、第二步:自定义事件触发类:
view plaincopy to clipboardprint?
package myeventhelper
{
import flash.events.EventDispatcher;
import mx.core.UIComponent;
//自定义事件触发类
public class MyEventDispatcher extends EventDispatcher
{
private static var _instance:MyEventDispatcher;
public static const EXEC_PARENT_METHOD:String="ExecParentMethod"; //执行Parent方法
public static function getInstance():MyEventDispatcher
{
if(_instance==null){
_instance=new MyEventDispatcher();
}
return _instance;
}
public var Source:UIComponent; //事件源对象
public var Parsms:Object; //主要用于参数传递
}
}
package myeventhelper
{
import flash.events.EventDispatcher;
import mx.core.UIComponent;
//自定义事件触发类
public class MyEventDispatcher extends EventDispatcher
{
private static var _instance:MyEventDispatcher;
public static const EXEC_PARENT_METHOD:String="ExecParentMethod"; //执行Parent方法
public static function getInstance():MyEventDispatcher
{
if(_instance==null){
_instance=new MyEventDispatcher();
}
return _instance;
}
public var Source:UIComponent; //事件源对象
public var Parsms:Object; //主要用于参数传递
}
}
3、第三步:用户自定义事件类
view plaincopy to clipboardprint?
package myeventhelper
{
import mx.events.FlexEvent;
//用户自定义事件类
public class MyExtendEvent extends FlexEvent
{
public static const EXEC_BROTHER_METHOD:String="ExecBrotherMethod";//执行兄弟方法
public var param:Object;
public function MyExtendEvent(o:Object,type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this.param = o;//也可通过这样的方式传递参数
}
}
}
package myeventhelper
{
import mx.events.FlexEvent;
//用户自定义事件类
public class MyExtendEvent extends FlexEvent
{
public static const EXEC_BROTHER_METHOD:String="ExecBrotherMethod";//执行兄弟方法
public var param:Object;
public function MyExtendEvent(o:Object,type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this.param = o;//也可通过这样的方式传递参数
}
}
}
4、第四步:完成儿子A“comBrotherA.mxml”:
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml
" width="222" height="170" title="组件A" creationComplete="init()">
<mx:Script>
<!--[CDATA[
import myeventhelper.MyExtendEvent;
import myeventhelper.MyEventDispatcher;
import myeventhelper.EventArgExtend;
private var execParent:MyEventDispatcher; //触发父亲节点事件
function init():void
{
execParent = MyEventDispatcher.getInstance();
}
public function onGetParentTotal(e:MyExtendEvent,...agrs):void
{
//下面两种方法都可以用来传递参数
//this.labTotal.text = String(agrs[0].totalValue);
this.labTotal.text = e.param.toString();
}
public function onParentEvent(event:Event):void
{
execParent.Parsms = txtValue.text;
execParent.Source = this;
execParent.dispatchEvent(new Event(MyEventDispatcher.EXEC_PARENT_METHOD));
}
]]-->
</mx:Script>
<mx:Canvas height="90" width="197">
<mx:TextInput width="92" y="10" x="85" id="txtValue"/>
<mx:Label x="13" y="12" text="存入:"/>
<mx:Label x="87" y="56" width="90" id="labTotal"/>
<mx:Label x="5" y="56" text="ParentTotal:"/>
</mx:Canvas>
<mx:ControlBar>
<mx:Button label="调用父方法" id="btnExecParent" click="onParentEvent(event)"/>
</mx:ControlBar>
</mx:Panel>
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml
" width="222" height="170" title="组件A" creationComplete="init()">
<mx:Script>
<!--[CDATA[
import myeventhelper.MyExtendEvent;
import myeventhelper.MyEventDispatcher;
import myeventhelper.EventArgExtend;
private var execParent:MyEventDispatcher; //触发父亲节点事件
function init():void
{
execParent = MyEventDispatcher.getInstance();
}
public function onGetParentTotal(e:MyExtendEvent,...agrs):void
{
//下面两种方法都可以用来传递参数
//this.labTotal.text = String(agrs[0].totalValue);
this.labTotal.text = e.param.toString();
}
public function onParentEvent(event:Event):void
{
execParent.Parsms = txtValue.text;
execParent.Source = this;
execParent.dispatchEvent(new Event(MyEventDispatcher.EXEC_PARENT_METHOD));
}
]]-->
</mx:Script>
<mx:Canvas height="90" width="197">
<mx:TextInput width="92" y="10" x="85" id="txtValue"/>
<mx:Label x="13" y="12" text="存入:"/>
<mx:Label x="87" y="56" width="90" id="labTotal"/>
<mx:Label x="5" y="56" text="ParentTotal:"/>
</mx:Canvas>
<mx:ControlBar>
<mx:Button label="调用父方法" id="btnExecParent" click="onParentEvent(event)"/>
</mx:ControlBar>
</mx:Panel>
5、第五步:完成儿子B“comBrotherB.mxml”:
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml
" width="222" height="170" title="组件B" creationComplete="init()">
<mx:Script>
<!--[CDATA[
import myeventhelper.MyExtendEvent;
import myeventhelper.MyEventDispatcher;
import myeventhelper.EventArgExtend;
private var execParent:MyEventDispatcher; //触发父亲节点事件
function init():void
{
execParent = MyEventDispatcher.getInstance();
}
public function onGetParentTotal(e:Event,...agrs):void //响应父亲类的触发的事件
{
this.labTotal.text = String(agrs[0].totalValue);
}
public function onParentEvent(event:Event):void //通过自定义事件触发类传递参数
{
execParent.Parsms = txtValue.text;
execParent.Source = this;
execParent.dispatchEvent(new Event(MyEventDispatcher.EXEC_PARENT_METHOD));
}
]]-->
</mx:Script>
<mx:Canvas height="90" width="197">
<mx:TextInput width="92" y="10" x="85" id="txtValue"/>
<mx:Label x="13" y="12" text="存入:"/>
<mx:Label x="87" y="56" width="90" id="labTotal"/>
<mx:Label x="5" y="56" text="ParentTotal:"/>
</mx:Canvas>
<mx:ControlBar>
<mx:Button label="调用父方法" id="btnExecParent" click="onParentEvent(event)"/>
</mx:ControlBar>
</mx:Panel>
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml
" width="222" height="170" title="组件B" creationComplete="init()">
<mx:Script>
<!--[CDATA[
import myeventhelper.MyExtendEvent;
import myeventhelper.MyEventDispatcher;
import myeventhelper.EventArgExtend;
private var execParent:MyEventDispatcher; //触发父亲节点事件
function init():void
{
execParent = MyEventDispatcher.getInstance();
}
public function onGetParentTotal(e:Event,...agrs):void //响应父亲类的触发的事件
{
this.labTotal.text = String(agrs[0].totalValue);
}
public function onParentEvent(event:Event):void //通过自定义事件触发类传递参数
{
execParent.Parsms = txtValue.text;
execParent.Source = this;
execParent.dispatchEvent(new Event(MyEventDispatcher.EXEC_PARENT_METHOD));
}
]]-->
</mx:Script>
<mx:Canvas height="90" width="197">
<mx:TextInput width="92" y="10" x="85" id="txtValue"/>
<mx:Label x="13" y="12" text="存入:"/>
<mx:Label x="87" y="56" width="90" id="labTotal"/>
<mx:Label x="5" y="56" text="ParentTotal:"/>
</mx:Canvas>
<mx:ControlBar>
<mx:Button label="调用父方法" id="btnExecParent" click="onParentEvent(event)"/>
</mx:ControlBar>
</mx:Panel>
6、第六步:完成父亲类"parentApp.mxml":
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
" layout="absolute" height="323" xmlns:ns1="component.*" creationComplete="init();" width="574">
<mx:Script>
<!--[CDATA[
import myeventhelper.MyExtendEvent;
import myeventhelper.MyEventDispatcher;
import myeventhelper.EventArgExtend;
private var parentDP:MyEventDispatcher;
public var totalValue:Number = 0;
function init():void
{
parentDP = MyEventDispatcher.getInstance();
nodeEvent = new MyExtendEvent(totalValue,MyExtendEvent.EXEC_BROTHER_METHOD);
if(!parentDP.hasEventListener(MyEventDispatcher.EXEC_PARENT_METHOD))
parentDP.addEventListener(MyEventDispatcher.EXEC_PARENT_METHOD,getSonValue);//注册通过自定义事件触发类传递参数
//注册事件时传递参数
addEventListener(MyExtendEvent.EXEC_BROTHER_METHOD,EventArgExtend.create(comA.onGetParentTotal,this));
addEventListener(MyExtendEvent.EXEC_BROTHER_METHOD,EventArgExtend.create(comB.onGetParentTotal,this));
}
function getSonValue(e:Event):void
{
if(parentDP.Source == comA)
{
txtA.text = String(parentDP.Parsms);
}
else
{
txtB.text = String(parentDP.Parsms);
}
}
//将结果返回儿子节点
private var nodeEvent:MyExtendEvent;
function onSumToNode(e:Event):void//触发事件将结果返回儿子节点
{
totalValue = Number(txtA.text) + Number(txtB.text);
txtTotal.text = String(totalValue);
nodeEvent.param = totalValue;
dispatchEvent(nodeEvent);
}
]]-->
</mx:Script>
<mx:Canvas x="0" y="0" width="573" height="323" backgroundColor="#729AAC">
<mx:TextInput x="65" y="219" id="txtA"/>
<mx:TextInput x="65" y="248" id="txtB"/>
<mx:TextInput x="65" y="276" id="txtTotal"/>
<mx:Label x="37" y="222" text="A:"/>
<mx:Label x="37" y="251" text="B:"/>
<mx:Label x="23" y="278" text="Total:"/>
<mx:Button x="244" y="219" label="触发儿子事件" click="onSumToNode(event)"/>
<ns1:comBrotherA x="37" y="10" id="comA" width="247">
</ns1:comBrotherA>
<ns1:comBrotherB x="323" y="10" id="comB">
</ns1:comBrotherB>
</mx:Canvas>
</mx:Application>
7、执行(存入分别“调用父亲方法”,"触发儿子事件")最终结果:
http://blog.csdn.net/xingjunli/article/details/5107483
发表评论
-
Flex 双斜杠替换单斜杠
2012-02-23 16:11 3233在数据库中存入\r 或者 \n,java或者C#取出后,会变 ... -
flex4操作xml文件实例
2011-11-29 16:33 1634本实例共两个文件: 1、主程序:test.mxml & ... -
Flex异步令牌AsyncToken的用法介绍
2011-11-29 16:22 1425什么是AsyncToken?官方文档是这样描述的:&qu ... -
Flex验证码
2010-07-26 11:28 1530Flex验证码 -
Flex DateGrid表头全选
2010-07-26 11:27 1559Flex DateGrid表头全选 -
Flex中字符串ReplaceAll
2010-05-17 16:22 1438用过FLEX中String类型的朋友可能知道,replace这 ... -
xmllist转换成array
2010-04-26 16:24 2308//将xmllist转黄成array。 ... -
Flex 屏蔽IE的快捷键
2010-04-24 15:21 3657如果项目叫Demo,那么他的HTML应该叫做Demo.html ... -
textinput restrict(正则表达式,约束,限定)
2010-04-20 08:57 1992通常要对输入TextInput中的数据进行验证,如:年龄等,如 ... -
不适用PopUpManage弹出
2010-04-06 09:26 1305Test包下test.mxml代码 <?xml ve ... -
Flex4教程
2010-03-30 11:05 17743最近在学习Flex4,并且开始使用FlashBuilder4, ... -
在AS3中删除一个XML节点
2010-03-29 16:49 1465如果我们在AS3中声明了一个XML片段,并且想在运行时删除其中 ... -
如何限制文本输入的类型?
2010-03-29 09:38 1427在制作Flash表单的时候,我们通常需要限定一下用户输入数据的 ... -
监听IE关闭事件
2010-03-26 10:57 1740//mxml下写入private function AppCo ... -
Flex DataGrid取其中的某一个值
2010-03-22 14:56 2583<?xml version="1.0" ... -
Flex ComboBox prompt使用
2010-03-22 14:55 2303<?xml version="1.0" ... -
一个默认不出现滚动条的hack
2010-03-22 14:45 1289在app里加入 private function prein ... -
Flex 编译参数
2010-03-22 14:26 1179下面是一些常见的编译器参数: 1,【verbose-stack ... -
Flex DataGrid中的DataGridColumn实现Tooltip/Datatip
2010-03-19 10:42 3097I had the problem that I wanted ... -
Flex CombBox联动使用XML实现
2010-03-19 10:40 1227<?xml version="1.0" ...
相关推荐
教你7步实现flex自定义Event与参数传递.doc
flex 自定义组件,UI,flex 自定义组件。
flex自定义的树形结构,展开,收缩,多级目录支持
Flex 自定义ToolTip源代码,可以运行的源代码
Flex自定义加载条的一个小示例。里面有readMe文本
研究Flex 组件声明周期,了解组件的生成步骤
Flex 自定义 时间 日历 控件
FLEX自定义等待图标资源 18个SWF资源,19个GIF资源
Flex自定义右键菜单
flex 高级自定义组件 需要重写的方法,以及为什么要重写,何时调用等。
flex 自定义右键菜单 多级右键菜单flex 自定义右键菜单 多级右键菜单flex 自定义右键菜单 多级右键菜单
FLex自定义写的控件,有时间,datagrid,tree,combox等,以及常用的处理字符串,弹出窗口
Flex自定义组件和自定义事件的使用。 Flex自定义组件和自定义事件的使用。
flex自定义创建css样式,很有用的资源··
Flex 自定义公共包,可以在项目里直接使用
flex自定义组件事件DEMO,一个简单的flex自定义组件的demo
Flex4自定义组件 介绍了flex中如何自定义组件以及相关应用
Adobe Flex Builder 3 中组件之间的参数传递(主要是给大家学习)
flex获得html容器传递的url参数值
flex 自定义右键菜单