2012-12-08 78 views
0

我有具有變化事件自定義MXML組件聲明:我可以在自定義組件中禁用CHANGE事件嗎?

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

的問題是,每當我改變包括一個簡單的無功分量內部的任何將分派此事件。有時我希望能夠更改組件中var的值,而無需分派更改事件。有沒有簡單的方法來禁用更改事件,然後在我做出我想要的更改後重新啓用它?

我試圖使用removeEventListener(「change」),但它似乎我只能做一個函數,添加一個事件監聽器。 removeEventListener(Event.CHANGE)相同。

當然必須有禁止在 MX聲明的事件的一個簡單的方法:元數據

回答

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的SubClasses事件的新事件類。該當你讓你變...

dispatchEvent(new MyChangeEvent(MyChangeEvent.STUFF_CHANGED)) 

然後

myCustomComponentThatDispatchesALotOfChangeEvents.addEventListener(MyChangeEvent.STUFF_CHANGED, onChange); 
+0

感謝您的回答傑森。如果我有任何問題,我會試一試並回復你。看起來很有希望。 – GuyOxford

相關問題