我几乎没有与事件有关的问题。
有人能解释在创建自定义事件时覆盖clone()的确切需要吗? 我在Flex Cookbook中读到,我们需要覆盖clone()以防我们想要重新发送此事件。这是否意味着当我们希望事件在显示层次结构中冒泡时,调度的事件应该是我们的自定义克隆事件而不是Event对象?
其次,元数据标签的需求是什么:
[Event(name =“modelEvent”,type =“com.abc.data.model.ModelEvent”)]
公共类LoginModel扩展了EventDispatcher {}
我知道我们需要扩展EventDispatcher,以防我们想要从类调度事件,但在什么情况下我需要使用Metadata标记?
我的第三个问题是,如果我写dynamic customEventClass extends Event"
,我可以将动态关键字用于任何目的吗?
答案 0 :(得分:4)
1)Redispatching事件与冒泡不同。假设我们有一些(第三方)组件在没有冒泡的情况下调度事件。我们希望进一步委托此事件。在这种情况下,我们需要重新发送事件:
myButton.addEventListener(MouseEvent.CLICK, myButtonClickHandler);
...
private function myButtonClickHandler(event:MouseEvent):void
{
dispatchEvent(event);
}
在这种情况下,行dispatchEvent(event)
通过克隆它来产生新事件。
如果您确定其他人不会使用包含自定义事件的组件,则可以省略实施clone()
。但谁知道......最佳实践是遵循它们的最佳实践。
2)Event
metatag解决了至少两个实际任务:
Event
元标记声明的错误。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)使用新集合进行侦听构造函数的值。