0

我有一个自定义 MXML 组件,它的更改事件声明为:

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

问题是,每当我更改组件内的任何内容(包括简单的 var)时,都会调度此事件。有时我希望能够在不调度更改事件的情况下更改组件中 var 的值。有没有一种简单的方法可以禁用更改事件,然后在我进行了我想要的更改后重新启用它?

我尝试使用 removeEventListener("change") 但似乎我只能对添加了事件侦听器的函数执行此操作。removeEventListener(Event.CHANGE) 也一样。

当然,必须有一种简单的方法来禁用 mx:Metadata 中声明的事件

4

1 回答 1

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() 取消事件默认行为

“改变”也是一种弹性的东西。如果您只想在一个特定场景中分派事件,请创建一个新的事件类,将事件子类化为 MyChangeEvent。当你做出改变...

dispatchEvent(new MyChangeEvent(MyChangeEvent.STUFF_CHANGED))

然后

myCustomComponentThatDispatchesALotOfChangeEvents.addEventListener(MyChangeEvent.STUFF_CHANGED, onChange);
于 2012-12-08T17:11:15.430 回答