flex开发问题汇总2(事件)

      事件就是让你的上级或下级干活的一个机制,你负责在适当的时候抛出事件,上级或下级在捕获你这个事件执行回调方法即可。

      flex的事件处理得益于EventDispatcher基类,InteractiveObject类提供了鼠标、键盘、聚焦、拖拽等事件支持,继承于它的UI组件又自定义了各种的特有事件,我们在适当的时候捕获(监听)它就可以。

我们先看看捕获到的事件有包含了那些东东:

      1、所有事件都继承于flash.events.Event基类,自身就是实现了很多基础事件类型,详细点连接看。

      2、加上自己的构造方法,先看事件的构造方法Event(type:String, bubbles:Boolean = false, cancelable:Boolean = false)

           type表示事件的名称,我们根据这个名称来捕获它,bubbles表示是否向上抛出事件,cancelable表示可以取消Event带来的行为

          (发生事件时,该事件在事件流的三个阶段中移动:捕获阶段,该阶段从显示列表层次结构的顶部流动到目标节点之前的节点;目标阶段,该阶段只包括目标节点;冒泡阶段,该阶段从目标节点的后续节点沿显示列表层次结构向上往回流动。)

          Event.cancelable 属性来检查是否可以防止与特定事件关联的默认行为。如果 Event.cancelable 的值为 true,则可以使用 preventDefault() 来取消事件;否则,preventDefault() 无效。)

      3、重写Event的clone()方法。返回一个新的Event对象即可。

    

    下面是我自己写的一个自定义事件:

 

      有了这个东西,我们就可以在适当的时候抛出它,然后由抛出者上级的对象去捕获,添加回调函数OK。

然后我们看看如何抛出这是事件:

      如果事件是可视化组件抛出,且设置事件构造函数bubbles为true时,则可以在“事件流”中传送直到被捕获,很像java异常的感觉,但是只在可视化组件通过addChild()方法组成显示列表中组件中传播。我们现在写一个继承UIComponent基础组件,让它抛出我们刚刚定义的MyEvent,触发条件是设置num的值时抛出。

      调用setNum()方法是可能触发事件,自己根据需要设置事件的触发点吧,可以参照各个可视化组件自定义事件的触发原理,代码是开源的,点开看就是。好了一个事件抛出了。

最后我们看看怎么捕获这个事件:

      在事件抛出的“事件流”上都可以捕获这个事件,可以选择处理也可以选择继续抛出(太像异常了)。我们在事件没有发生前就做好准备,当事件发生是调用我们准备好的方法——这个事情叫做监听,那个方法叫做回调方法。下面是监听函数定义,来自EventDispatcher类

addEventListener(type:String,listener:Function,useCapture:Boolean=false,priority:int=0, useWeakReference:Boolean = false)

    第一个参数 type 就是我们定义的时间名称,MyEvent.MY_TYPE_1

    第二个参数 是回调函数,自带这个捕获的事件实例。

    第三个参数 是可视化组件中,是否捕捉冒泡类型的时间(也就是子节点抛出的事件)。false是捕获冒泡的-_-!

    第四个参数 是优先级,那些是优先处理的事件,注意处理过程还是异步的。

    第五个参数 false是强引用,不会被垃圾回收机制回收,但是要记得释放 removeEventListener()。

下面是实现捕捉的实例:

      好了,debug看看输出吧,一个自定义事件完成。想象一下这个num表示水库的水位-_-! 

 

阅读更多
想对作者说点什么? 我来说一句

flex事件flex事件flex事件flex事件

2011年04月16日 147KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭