このセクションでは、既にある XBL 定義を拡張する方法を見ることにしましょう。
時には、既にあるものに似た XBL ウィジェットを作りたい場合があるかもしれません。例えば、ポップアップ付きの XBL ボタンを作りたいとしましょう。これを作る一つの方法は、ボタンのための既にある XBL コードを複製することです。しかし、既にあるボタンのコードを拡張するだけの方が望ましいでしょう。
バインディングはどれも、別のものを拡張できます。子供のバインディングには、プロパティー、メソッド、イベントハンドラーを追加できます。子供のバインディングは、それが継承するバインディングの機能 (と、そのバインディングがツリーの上流から継承する機能) の他に、それが定義するすべての機能をもちます。
既にあるバインディングを拡張するには、binding タグに extends 属性を追加します。例えば、以下のバインディングは、テキストボックスを作ります。これは、F4 キーが押されると、その値の始めに 'http://www' というテキストを追加します。
例 11.8.1
<binding id="textboxwithhttp" extends="chrome://global/content/xulBindings.xml#textbox">
<handlers>
<handler event="keypress" keycode="VK_F4">
this.value="http://www"+value;
</handler>
</handlers>
</binding>
|
ここでは、XBL は XUL テキストボックス要素を拡張しています。上の extends にある URL は、テキストボックスのバインディングの URL です。これは、テキストボックスのバインディングが提供する内容と振る舞いのすべてを継承するということです。それ以外に、キー押し下げイベントに応答するハンドラーを追加しています。
上の例は、URL の自動補完機能が Mozilla で動作する仕組みに類似しています。自動補完をサポートするテキストボックスは、基本となるテキストボックスを拡張するバインディングをもつものにすぎません。
自動補完テキストボックスに特別なイベント処理を追加し、それによって、URL が入力されると、メニューは補完候補からなるポップアップを表示します。これは、自分自身のアプリケーションでも使用できます。2 つの特別な属性をもつテキストボックスを作るだけです。
<textbox type="autocomplete" searchSession="history"/> |
既にあるテキストボックスに自動補完機能を追加するには、type を autocomplete に設定します。どんな種類のデータを探すのか指示するため、searchSession を設定します。この場合は、history を使っています。これは、履歴 (history) にある URL を探します。(アドレスブック内のアドレスを探すには、addrbook という値も使用できます。)
(進む) 次のセクションでは、XBL ウィジェットの例を見ることにしましょう。
例: 11.8.1