| Flex 2 開発ガイド > Flex プログラミング言語の使用 > イベントの使用 > イベントの優先度 | |||
イベントリスナーは、1 つのイベントに対していくつでも登録できます。登録は addEventListener() メソッドの呼び出し順に行われ、イベント発生時には登録順にリスナー関数が呼び出されます。ただし、一部のイベントリスナーをインラインで登録し、その他のイベントリスナーを addEventListener() メソッドで登録した場合、1 つのイベントに対してリスナーが呼び出される順序は予測できません。
イベントリスナーが呼び出される順序を変更するには、addEventListener() メソッドの priority パラメータを使用します。これは、addEventListener() メソッドの 4 番目のパラメータです。
イベントリスナーは優先度の高い順に呼び出されます。つまり、最も優先度の高いイベントが最初に呼び出されます。次の例では、saveInputData() 関数の前に verifyInputData() メソッドが呼び出されます。これは、verifyInputData() メソッドの優先度が最も高いためです。そして、priority パラメータの値が最も小さい returnResult() が最後に呼び出されます。
<?xml version="1.0"?>
<!-- events/ShowEventPriorities.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()">
<mx:Script><![CDATA[
private function returnResult(e:Event):void {
trace("returnResult");
}
private function verifyInputData(e:Event):void {
trace("verifyInputData");
}
private function saveInputData(e:Event):void {
trace("saveInputData");
}
private function initApp():void {
b1.addEventListener(MouseEvent.CLICK, returnResult, false, 1);
b1.addEventListener(MouseEvent.CLICK, saveInputData, false, 2);
b1.addEventListener(MouseEvent.CLICK, verifyInputData, false, 3);
}
]]></mx:Script>
<mx:Button id="b1" label="Click Me"/>
</mx:Application>
イベントの優先度には有効な整数 (負または正) を指定します。デフォルト値は 0 です。複数のリスナーに対して同じ優先度が設定されている場合は、登録された順に呼び出されます。
イベントリスナーを定義した後でイベントリスナーの優先度を変更する場合は、removeEventListener() メソッドを呼び出してリスナーを削除する必要があります。その後、同じイベントを新しい優先度で追加します。
addEventListener() メソッドの priority パラメータは、DOM Level 3 イベントモデルの正式なパラメータではありません。ActionScript 3.0 では、プログラマがイベントリスナーをより柔軟に整理できるようにするため、このパラメータが提供されています。
あるリスナーに高い優先度を与えた場合でも、そのリスナーの実行が完了してから次のリスナーが呼び出されることを保証する手段はありません。前のリスナーの実行が完了しなければ次のリスナーが呼び出せないような、リスナー間の依存関係を作らないでください。Flash Player では、必ずしも前のイベントリスナーの処理が完了してから次のリスナーの処理が始まるとは限らないことを理解しておくことが必要です。
リスナーが互いに依存関係にある場合、リスナー関数を別のリスナー関数から呼び出すか、前のイベントリスナーから新しいイベントを送出できます。イベントを手動で送出する方法については、
手動によるイベントの送出を参照してください。
Flex 2.01