SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「Dojo道場」~実用アプリ構築のためのベストプラクティス

Dojo道場 ~ 第6回「Dijitウィジェットを利用したアプリケーション作成の基礎」

「Dojo道場」~実用アプリ構築のためのベストプラクティス

  • X ポスト
  • このエントリーをはてなブックマークに追加

ウィジェットのイベント処理

 ウィジェットには固有のイベントが定義されていて、ウィジェットが特定の状態(ボタンが押された、ペインが開いた等)になったとき呼び出されます。 どのようなイベントが定義されているのかはAPIドキュメントに記述されています。 たとえばdijit.form.Buttonウィジェットの場合はonClick, onMouseDown, onShowなどが定義されています。

 あるイベントが発生したときに処理を行いたい場合、イベント・ハンドラーの書き方にはいくつかの方法があります。

拡張scriptタグによる静的記述

 前節の静的な手法でHTML内にウィジェットを配置したとき、ウィジェット定義の内部に次のように<script>タグを記述することができます。 type属性には"dojo/connect"または"dojo/method"を指定し、event属性には対象にするイベントを指定します。

リスト5. <script>タグによるウィジェットへのイベント・ハンドラーの記述
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ウィジェットへのイベント・ハンドラーの記述</title>
<style>
@import url("../dojo-release-1.5.0/dojo/resources/dojo.css");
@import url("../dojo-release-1.5.0/dijit/themes/claro/claro.css");
</style>
<script type="text/javascript" src="../dojo-release-1.5.0/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
<script type="text/javascript">
dojo.require("dojo.parser"); // DojoがHTMLをパースするのに必要
dojo.require("dijit.form.Button");
</script>
</head>
<body class="claro">
<div id="button1" dojoType="dijit.form.Button">dojo/connect
	<script type="dojo/connect" event="onClick">
		// type="dojo/connect"の場合、ウィジェットのイベントを表すメソッドにdojo.connect()で処理を追加するのと等価
		alert('Clicked!');
	</script>
</div>

<div id="button2" dojoType="dijit.form.Button">dojo/method
	<script type="dojo/method" event="onClick">
		// type="dojo/method"の場合、ウィジェットのイベントを表すメソッドを置き換える (関数を代入するのと等価)
		alert('Clicked!');
	</script>
</div>

</body>
</html>

 処理内容が簡潔な場合に利用するとよいでしょう。

イベント・ハンドラーへの代入またはdojo.connect()

 直前の例と同等なイベント処理をJavaScriptコードからセットする場合、次のように書くことができます。

リスト6. <script>タグによるウィジェットへのイベント・ハンドラーの記述
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ウィジェットのイベント・ハンドラーの記述(2)</title>
<style>
@import url("../dojo-release-1.5.0/dojo/resources/dojo.css");
@import url("../dojo-release-1.5.0/dijit/themes/claro/claro.css");
</style>
<script type="text/javascript" src="../dojo-release-1.5.0/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
<script type="text/javascript">
dojo.require("dojo.parse"); // DojoがHTMLをパースするのに必要
dojo.require("dijit.form.Button");

function onButtonClick(event) {
	alert("Clicked!");
}
var handler = null;
dojo.addOnLoad(function() {
	handler = dojo.connect(dijit.byId("button1"), "onClick", window, "onButtonClick");
});

dojo.addOnUnload(function(){
	dojo.disconnect(handler);
});
</script>
</head>
<body class="claro">
  <div id="button1" dojoType="dijit.form.Button">dojo.connect()</div>
  <div id="button2" dojoType="dijit.form.Button" onClick="onButtonClick">イベント・ハンドラーの代入</div>
  <!-- コード中で dijit.byId("button2").onClick = onButtonClick; としてもよい -->
</body>
</html>

 コードからウィジェットのイベント・ハンドラーをセットする場合、セットするタイミングや処理内容を柔軟に変えることができます。

次のページ
Pub/Subによるメッセージ処理

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
「Dojo道場」~実用アプリ構築のためのベストプラクティス連載記事一覧

もっと読む

この記事の著者

仁田 圭祐(ニッタ ケイスケ)

日本アイ・ビー・エム株式会社ソフトウェア開発研究所にて日々Webアプリケーションに関わる製品開発をしています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

三浦 圭司(ミウラ ケイジ)

日本アイ・ビー・エム株式会社ソフトウェア開発研究所に勤務。現在は、エンタープライズ向け製品のWebアプリケーションのユーザー・インターフェース開発に従事。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5835 2011/04/06 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング