Adobe flex - 事件元数据标记和克隆方法

时间:2011-07-22 13:31:12

标签: flex events flex3 flex4

我几乎没有与事件有关的问题。

有人能解释在创建自定义事件时覆盖clone()的确切需要吗? 我在Flex Cookbook中读到,我们需要覆盖clone()以防我们想要重新发送此事件。这是否意味着当我们希望事件在显示层次结构中冒泡时,调度的事件应该是我们的自定义克隆事件而不是Event对象?

其次,元数据标签的需求是什么:

  

[Event(name =“modelEvent”,type =“com.abc.data.model.ModelEvent”)]
  公共类LoginModel扩展了EventDispatcher {}

我知道我们需要扩展EventDispatcher,以防我们想要从类调度事件,但在什么情况下我需要使用Metadata标记?

我的第三个问题是,如果我写dynamic customEventClass extends Event",我可以将动态关键字用于任何目的吗?

4 个答案:

答案 0 :(得分:4)

1)Redispatching事件与冒泡不同。假设我们有一些(第三方)组件在没有冒泡的情况下调度事件。我们希望进一步委托此事件。在这种情况下,我们需要重新发送事件:

myButton.addEventListener(MouseEvent.CLICK, myButtonClickHandler);

...

private function myButtonClickHandler(event:MouseEvent):void
{
    dispatchEvent(event);
}

在这种情况下,行dispatchEvent(event)通过克隆它来产生新事件。

如果您确定其他人不会使用包含自定义事件的组件,则可以省略实施clone()。但谁知道......最佳实践是遵循它们的最佳实践。

2)Event metatag解决了至少两个实际任务:

  • 当有人在MXML中使用目标组件时,它允许编译器验证MXML中相应属性的使用。因此,只要事件属性未知,编译器就会产生没有Event元标记声明的错误。
  • 当您在ActionScript中键入addEventListener时,它允许IDE使用可用事件的代码完成。

3)关键字dynamic允许在实例中使用任何字段,即使它们未在类中声明而没有任何编译器警告(但没有IDE的代码完成优势)。在事件类中,它允许随身携带任何自定义数据。为了避免使用data类(如in DataEvent),通常会有一些事件类为Object类型声明dynamic字段{/ 1}}字段。

答案 1 :(得分:0)

  

第二 - 是否需要元数据标签 - [Event(name =“modelEvent”,   type =“com.abc.data.model.ModelEvent”)] ...但在什么情况下我需要   指定MetaData TAg

元数据标记仅用于IDE内部的代码提示。如果您希望事件显示在组件的MXML代码提示中,则需要放置事件元数据标记。

当您对具有自定义类类型的变量使用addEventLIstener时,这也可能会影响ActionScript代码提示,但我还没有测试过。

在MXML中,如果尝试为没有元数据的事件添加事件侦听器,则会出现编译器错误。但是ActionScript允许它。

我知道这只是答案的一半。就克隆事件而言;我建议总是创建一个,因为如果不这样做,我经常会遇到Flex Framework的错误。但是,我无法确定具体问题。

答案 2 :(得分:0)

我使用事件来处理所有事情,因此我发现存储事件会对事件产生重大影响,以便在撤消后,可以再次调度它们以支持重做(即,如果再次发送相同的事件,它会再次导致相同的动作。)

我不相信冒泡使用克隆,但源代码不可用。

答案 3 :(得分:0)

我希望Event Bubbling允许相同的事件通过容器层次结构传播,但是使用clone()方法通过创建一个新的克隆实例使其不同,以便重新调度它以便在哪里(Listener)使用新集合进行侦听构造函数的值。