我可以在自定义组件中禁用CHANGE事件吗?

时间:2012-12-08 13:32:53

标签: flex events flash-builder mxml

我有一个自定义MXML组件,其变更事件声明为:

<mx:Metadata>
   [Event(name="change", type="flash.events.Event")]
</mx:Metadata> 

问题是每当我更改组件内的ANYTHING(包括简单的var)时,都会调度此事件。有时我希望能够在不调度change事件的情况下更改组件中var的值。是否有一种简单的方法可以禁用更改事件,然后在我完成所需的更改后重新启用它?

我尝试使用removeEventListener(“change”)但看起来我只能为添加了事件监听器的函数执行此操作。对于removeEventListener(Event.CHANGE)也一样。

当然必须有一种简单的方法来禁用声明的事件     mx:元数据

1 个答案:

答案 0 :(得分:0)

是的,你可以使用的事件有方法。因此,虽然事件仍然被发送,但是这使您可以完全控制它发生的事情。

// first set the useCapture flag to true
// this tell flex that onChange gets the event before it starts bubbling
myCustomComponentThatDispatchesALotOfChangeEvents.addEventListener(Event.CHANGE, onChange, true);

private function onChange(event:Event):void{
    // here is the method you want
    // this stops the event from bubbling and lets you handle
    // all functionality in this listener only
    event.stopImmediatePropogation();
    // now look at what happened and see if you want to 
    // do anything else based on what actually changed
}

作为附注,您还可以查看Event.preventDefault(),它取消了事件的默认行为

“改变”也是一种灵活的东西。您希望仅在一个特定场景中调度事件,创建一个SubClasses事件类似于MyChangeEvent的新事件类。你做出改变的时候......

dispatchEvent(new MyChangeEvent(MyChangeEvent.STUFF_CHANGED))

然后

myCustomComponentThatDispatchesALotOfChangeEvents.addEventListener(MyChangeEvent.STUFF_CHANGED, onChange);