Event Handlers

イベントハンドラは handler 要素を使って定義されます。ハンドラは event 属性を使ってどのイベントのために待機するかを定義します。イベントがハンドラが結びついたオブジェクトへフローする (流れる) ときや、そのイベントがハンドラに定義された基準のすべてに一致したとすると、実行されるスクリプトをこのハンドラは含んでいます。

もっとも基本となるハンドラは待機するイベントとハンドラが発行されたとき行うアクションを定義します。この動作は action 属性を使うか、handler 要素の子供としてスクリプトを定義することによって定義されます。両方が定義されると、action 属性が優先されます。

デフォルトでは、ハンドラはバウンド要素に結びつけられます。そしてハンドラは通知イベントとして登録されます。これは

<handler event="click" action="foo()"/>

上記の定義が、バウンド要素上で定義された onclick="foo()" と類似していることを意味します。

イベントハンドラはウィンドウに、バウンドドキュメントに、attachto 属性を使ったバウンド要素に結びつけることが出来ます。バインディングはこの属性を使ってバウンドドキュメント上の load のようなイベントを待機するためのハンドラを登録することができます。その属性の値は、windowdocumentelement といったものです。

phase 属性はハンドラが登録されるイベントフローのフェーズ (段階) を定義します。デフォルトの値は bubbling で、そのイベントハンドラが bubbling (通知される) なフェーズで発行されることを意味します。その他の値として取りうるものに target があり、そのハンドラは event.target がハンドラが結びつけられた対象と同じときに発行されることを意味します。また、capturing もあり、イベントフローの capturing (捕捉する) フェーズで発行されるべきハンドラであることを示します。

XBL イベントハンドラはいつでも、イベントフローの中の同じ位置にある他のすべてのイベントハンドラの後、一番最後に発行されます。XBL ハンドラは通常、ウィジェットへのデフォルトのアクションを構成するため、バウンドドキュメント中で XBL ハンドラによって行われるデフォルトアクションを潜在的に抑制するイベントを書くことができます。

XBL 継承のつながりの内部で、イベントハンドラはいつでも派生したバインディングで呼び出され、そしてつながりの基底バインディングで呼び出されていきます。そして派生したハンドラはその基底バインディングのハンドラにイベントが流れるのを防ぐことができます。

マウスハンドラとキーハンドラは XBL でサポートされるある種の追加のプロパティを持っています。追加の属性はイベントハンドラ上の「filter」を強制するために使うことが出来ます。filter が強制されると、追加の条件はイベントハンドラが発生する前に満たされる必要があります。

mouse イベントと key イベントの両方で、修飾キーは、modifiers 属性を使って特定できます。この属性は、ハンドラが実行する順番で key もしくは mousee イベントが発生した時に押下されている変化したキーのカンマ区切りのリストです。リストでよくあるキーの例として、shiftcontrol などが挙げられます。

それに加え、mouse イベントは buttonclickcount を定義できます。これにより、XBL 著者は、これらの場合を区別するために同じハンドラ上にスクリプトを書くことなく、右クリック、左ダブルクリックなどのためのハンドラを簡単に定義することができます。

key イベントは、charcode 属性と keycode 属性をサポートしています。セットされれば、event オブジェクトの対応するフィールドは発生したイベントに一致しなくてはなりません。

[編集者メモ: エラーハンドリングについても章を設けるべきか?多分そうだろう。]

Document Tags and Contributors

タグ:
Contributors to this page: Yoshino
最終更新者: Yoshino,