由于工作关系,只能简单整理下曾经做项目的心得,这里先谈谈As3.0的自定义事件。
对初学者可能感觉自定义很复杂,但等你克服恐惧真的用多了的话就会发觉其实自定义事件很简单,但正是简单的它可以让你的程序更灵活。
首先打开一个Flex项目 新建一个As类 让他继承Event,自动会生成一下代码:
view plaincopy to clipboardprint?
1. package com.event
2. {
3. import flash.events.Event;
4. public class myEvent extends Event
5. {
6. public function myEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
7. {
8. super(type, bubbles, cancelable);
9. }
10.
11. }
12. }
package com.event { import flash.events.Event; public class myEvent extends Event { public function myEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) { super(type, bubbles, cancelable); } } }
其中type是事件名 bubbles是是否冒泡,cancelable是指示是否可以组织事件对象默认行为。
对于不需要的参数可以去除,重写构造函数。如下:
1. package com.event
2. {
3. import flash.events.Event;
4. public class tempEvent extends Event
5. {
6. public var parm1:int;
7. public var parm2:String;
8. public var parm3:Boolean;
9. public function tempEvent(type:String, parm1:int,parm2:String,parm3:Boolean)
10. {
11. super(type);
12. this.parm1=parm1;
13. this.parm2=parm2;
14. this.parm3=parm3;
15. }
16.
17. }
18. }
package com.event { import flash.events.Event; public class tempEvent extends Event { public var parm1:int; public var parm2:String; public var parm3:Boolean; public function tempEvent(type:String, parm1:int,parm2:String,parm3:Boolean) { super(type); this.parm1=parm1; this.parm2=parm2; this.parm3=parm3; } } }
我自己定义了3个需要传递的参数,同时重写构造函数,这样一个自定义事件就完成了,是不是很简单。
知道怎么定义, 让我们看看怎么使用:
平时我们派发事件是用Event: dispatchEvent(new Event("type"));
自定义事件继承了Event,同样的:dispatchEvent(new myEvent("type",1,"1",false));
是不是也很简单
那它能为我们带来什么方便呢?
1。Event只能做到事件的派发与接收,不能做到灵活的数据传递,而自定义事件可以很容易的弥补这一不足。
2。 Event只能通过target和currentTarget得到事件对象,而有时候他们中没有一个是你想要的事件对象,那怎么办呢?自定义事 件可以很方便的解决这一问题,在自定义事件内定义属性o:Object,在事件派发的时候把想要得到的事件对象作为参数派发出去,这样你就可以在接受事件 的时候通过evt.o得到你想要的对象了。
习惯使用自定义事件你会发现Flex的事件机制不再那么神秘。
PS:
当然尽管方便,但如无必要尽量使用Event,因为过多的自定义事件会让你的代码繁杂不堪。
对初学者可能感觉自定义很复杂,但等你克服恐惧真的用多了的话就会发觉其实自定义事件很简单,但正是简单的它可以让你的程序更灵活。
首先打开一个Flex项目 新建一个As类 让他继承Event,自动会生成一下代码:
view plaincopy to clipboardprint?
1. package com.event
2. {
3. import flash.events.Event;
4. public class myEvent extends Event
5. {
6. public function myEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
7. {
8. super(type, bubbles, cancelable);
9. }
10.
11. }
12. }
package com.event { import flash.events.Event; public class myEvent extends Event { public function myEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) { super(type, bubbles, cancelable); } } }
其中type是事件名 bubbles是是否冒泡,cancelable是指示是否可以组织事件对象默认行为。
对于不需要的参数可以去除,重写构造函数。如下:
1. package com.event
2. {
3. import flash.events.Event;
4. public class tempEvent extends Event
5. {
6. public var parm1:int;
7. public var parm2:String;
8. public var parm3:Boolean;
9. public function tempEvent(type:String, parm1:int,parm2:String,parm3:Boolean)
10. {
11. super(type);
12. this.parm1=parm1;
13. this.parm2=parm2;
14. this.parm3=parm3;
15. }
16.
17. }
18. }
package com.event { import flash.events.Event; public class tempEvent extends Event { public var parm1:int; public var parm2:String; public var parm3:Boolean; public function tempEvent(type:String, parm1:int,parm2:String,parm3:Boolean) { super(type); this.parm1=parm1; this.parm2=parm2; this.parm3=parm3; } } }
我自己定义了3个需要传递的参数,同时重写构造函数,这样一个自定义事件就完成了,是不是很简单。
知道怎么定义, 让我们看看怎么使用:
平时我们派发事件是用Event: dispatchEvent(new Event("type"));
自定义事件继承了Event,同样的:dispatchEvent(new myEvent("type",1,"1",false));
是不是也很简单
那它能为我们带来什么方便呢?
1。Event只能做到事件的派发与接收,不能做到灵活的数据传递,而自定义事件可以很容易的弥补这一不足。
2。 Event只能通过target和currentTarget得到事件对象,而有时候他们中没有一个是你想要的事件对象,那怎么办呢?自定义事 件可以很方便的解决这一问题,在自定义事件内定义属性o:Object,在事件派发的时候把想要得到的事件对象作为参数派发出去,这样你就可以在接受事件 的时候通过evt.o得到你想要的对象了。
习惯使用自定义事件你会发现Flex的事件机制不再那么神秘。
PS:
当然尽管方便,但如无必要尽量使用Event,因为过多的自定义事件会让你的代码繁杂不堪。