0

次のように宣言された変更イベントを持つカスタムMXMLコンポーネントがあります。

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

問題は、単純な変数を含むコンポーネント内の何かを変更するたびに、このイベントがディスパッチされることです。変更イベントをディスパッチせずに、コンポーネントの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() を見ることもできます

「変更」もフレックスです。特定の 1 つのシナリオでのみイベントをディスパッチしたい場合は、MyChangeEvent のようなサブクラス イベントを持つ新しいイベント クラスを作成します。あなたがあなたの変更を行うとき...

dispatchEvent(new MyChangeEvent(MyChangeEvent.STUFF_CHANGED))

それから

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