このサンプルは、ボタンをクリックされるとアラートを表示する。こうしたイベント処理も、マークアップを用いて定義することが可能だ。 先ほどのサンプルの、ボタンウィジェットを貼り付けている部分を、以下のように修正しても動作することを確認してみてほしい。
<div id="button" dojoType="dijit.form.Button" label="クリックして!">
<!-- onClickイベントの処理 -->
<script type="dojo/connect" event="onClick" args="ev">
alert("こんにちは! ボタンのID:" + ev.target.id);
</script>
</div>
ボタン内部の<script>
タグに、onClick
イベントの処理ロジックが記述されている。このような構文はDojo固有のものだ。
この仕組みを利用するためのルールは以下の通り。
Dijitウィジェット内でしか使用できない
dojoType
を用いて定義されたUIウィジェット内でしか、この仕組みは利用できない
`<script>`タグの`type`属性に「`dojo/connect`」を使用する
これは、先ほどのコードを見ておわかりの通り。Dojoのサンプルなどでは、「dojo/method
」と言う記述も見かけるかもしれない。それについては後述。
`<script>`タグの`event`属性と`args`属性を定義し、処理を記述する
これも見ておわかりの通りだ。`event`属性には処理対象となるイベントの名称、`args`属性にはハンドラに渡される引数をコード内で使用するための名称を指定する。
<script type="dojo/connect" event="onClick" args="ev">
alert("こんにちは! ボタンのID:" + ev.target.id);
</script>
イベントハンドラに渡される引数を利用しないなら、`args`属性は省略してもよい。また引数が複数あるなら、`args`属性に引数の名前をカンマ区切りで指定する (例: `args="arg0, arg1"`)。
こうして定義した`<script>`タグ内に、直接イベント処理のコードを記述することができる。ここでは`alert()`を表示しているだけだ。
ここに記述したコードはメソッドの本文として扱われるため、`return`文などを記述することもできる。