Flex使用自定义事件

 

Flex

在Flex中增加一个新的事件,通常需要如下步骤:

1. 创建一个自定义的事件类,该类继承自flash.events.Event,比如

  1: package mypackage
  2: {
  3:   import flash.events.Event;
  4: 
  5:   public class ValueChangedEvent extends Event
  6:   {
  7:     // event name
  8:     public static const VALUE_CHANGED:String = "valueChanged";
  9:     public var value:Number; // customized filed for the event
 10:     
 11:     public function ValueChangedEvent(type:String, newValue:Number)
 12:     {
 13:       super(type);
 14:       this.value = newValue
 15:     }
 16:     
 17:     override public function clone():Event {
 18:       return new ValueChangedEvent(type, value);
 19:     }
 20:   }
 21: }

2. 在需要发布事件的组件里面,创建一个事件的metadata标签,这样Flex Builder就能自动提示该组件支持这个事件。

比如,在action script里面:

  1: [Event(name="valueChange", type="mypackages.ValueChangeEvent")]
  2: public class MyComponent extends TextArea
  3: {
  4:     ...
  5: }
  6: 

在mxml里面:

  1: <mx:Metadata>
  2:   [Event(name="valueChanged", type="mypackage.ValueChangeEvent")]
  3: </mx:Metadata>
  4: 

3. 注册事件
在MXML里面处理事件很简单。如果要把多个对象作为事件的接受者,该怎么办呢?在Flex里面,多数Components都继承了 EventDispatcher,该类提供了管理、通知事件的功能。从这点上看,Flex比Java要方便些。

如果要把一个对象注册为某个事件的接受者,只需下面这段代码:

  1: addEventListener(ValueChangedEvent.VALUE_CHANGED,listener);

[注意]上面方法中的listener是一个 Function对象。如果你需要myobj里面的handleValueChanged方法能响应该事件,那么你需要将 myobj.handleValueChanged传给addEventListener方法,注意handleValueChanged后面没有" ()"。


4. 通知事件

在发布事件的组件里面,通过调用如下代码就能把相应的事件发布出去:

  1: var e:ValueChangedEvent = new ValueChangedEvent(
  2:   ValueChangedEvent.VALUE_CHANGED, newValue);
  3: dispatchEvent(e);

Flex里面,创建自定义事件需要两个参数,一个代表事件类型的String对象,一个是特定于这个事件的信息(比如这里的newValue)。


posted on 2010-05-11 09:34  念时  阅读(1338)  评论(0编辑  收藏  举报

细节决定成败!态度决定一切!