Ajaxフレームワーク ユーザーズガイド |
目次 索引 |
第2章 クライアントフレームワーク | > 2.4 ユーザデータ/ユーザロジックの定義部 |
画面部品にイベントリスナを定義すると、ユーザの操作実行時に発生したイベントを監視し、制御を行います。
このイベントリスナの定義をユーザロジックの定義と呼びます。
画面上での操作に対して発生するイベントには、以下の2種類があります。
ここでは、a.のイベントについて、以下の項目を説明します。b.のイベントについては、“グローバルイベント制御”を参照してください。
ある画面部品で発生したイベントに対して、何らかの動作を定義するイベントリスナを対応付けるには、以下の方法があります。また、この対応付けた内容をイベント情報と呼びます。
以下に、それぞれの方法について説明します。
以下に、記述形式を示します。
オブジェクト={画面部品ID:{イベント名:関数名,イベント名:関数名,...}, 画面部品ID:{イベント名:関数名,イベント名:関数名,...}, ...} |
以下に、記述例を示します。
<script type="text/javascript"> //<![CDATA[ eventmap = { ←任意のオブジェクト名 engineStr : { ←画面部品IDがengineStrのイベントを定義 mouseover: func_emphasize, ←マウスオーバー時にfunc_emphasize関数を実行 mouseout: func_deemphasize, ←マウスアウト時にfunc_deemphasize関数を実行 click: func_eventListener ←クリック時にfunc_eventListener関数を実行 }, audioStr : { mouseover: func_emphasize, mouseout: func_deemphasize, click: func_eventListener }, transmission : { click: function() { ←無名関数としても定義可能 RCF.debug("transmission clicked"); } } }; //]]> </script> |
以下に、記述形式を示します。
オブジェクト={画面部品ID_イベント名:関数名, 画面部品ID_イベント名:関数名,...} |
以下に、記述例を示します。
<script type="text/javascript"> //<![CDATA[ myevent = { ←任意のオブジェクト名 TreeView1_datachange: func_datachange, ←IDがTreeView1という画面部品のデータが変更された場合 TreeView1_treenodeexpand: func_treenodeexpand, TreeView1_treenodecollapse: func_treenodecollapse, TreeView1_treenodeselect: func_treenodeselect }; //]]> </script> |
以下に、記述例を示します。
<div rcf:type="TextInput" rcf:onValueChange="myValueChange()"> |
イベント情報は、通常、画面(HTML/JSPファイル)単位に記述します。ただし、複数画面で共通に利用する場合は、外部ファイルに記述することを推奨します。
外部ファイルの記述については、“外部ファイルの定義”を参照してください。イベント情報を記述した外部ファイルは、FragmentContainer部品で使用します。FragmentContainer部品の使用方法については、“UI部品リファレンス”を参照してください。
イベント名は、各画面部品で利用可能なイベントリスナ名の先頭の“on”を削除し、残りをすべて小文字で表現したものです。
例えば、onValueChangeというイベントリスナが画面部品に定義されている場合は、valuechangeをイベント名として使用します。
オブジェクトに定義されたイベントリスナは、APIを利用してフレームワークに登録することで、利用可能となります。
イベントリスナの登録には、rcf.event.EventRegistrar.registerEvents関数を使用します。イベントリスナの登録解除には、rcf.event.EventRegistrar.unregisterEvents関数を使用します。
以下に、それぞれの使用例を示します。
rcf.event.EventRegistrar.registerEvents(eventmap, 'myeventmap1'); ← “myeventmap1”という名前を付けて登録 rcf.event.EventRegistrar.registerEvents(eventmap); ← 名前を付けずに登録 |
rcf.event.EventRegistrar.unregisterEvents('myeventmap1'); ← 登録時に付けた名前を指定して登録解除 |
イベントリスナ登録時に名前を付けずに登録した場合は、イベントリスナの登録解除はできません。
イベントリスナの登録は、画面(HTML/JSPファイル)単位に記述します。
イベント情報の定義とイベントリスナ(イベント情報で記述した関数)の定義は別に行います。つまり、別の定義ブロックに記述します。
なお、定義済みのイベントリスナをイベント情報に定義する場合があります。
以下に、記述例を示します。
<script type="text/javascript"> //<![CDATA[ function func_emphasize() { RCF.debug("mouse over"); } function func_deemphasize() { RCF.debug("mouse out"); } function func_eventListener() { RCF.debug("mouse over"); } //]]> </script> |
以下に、イベント情報で記述した関数がイベントオブジェクトを受け取る場合の記述例を示します。
以下の例は、“イベント情報”の“画面部品とイベントの組ごとに定義する方法”の記述例に対応する関数定義です。
<script type="text/javascript"> //<![CDATA[ var modelData = { treeData: { name: "root", children: [ { // 一つ目のノード name: "fj", label: "Fujitsu Group", isExpanded: false, children: [] } ] } }; function treenodeexpand(eventObject) { // 追加する子ノード var newTreeNode = { name: "fja", label: "Fujitsu Australia", isExpanded: false }; //イベントで通知されたノードパスの部分データを取得 var provider = model1.getNodeDataProvider("treeData", eventObject.nodePath); //イベントで通知されたノードの子ノード配列を取得 provider = provider.getDataProvider("children"); //子ノード配列に1つのノードデータを追加 provider.addItem(newTreeNode); } //]]> </script> |
イベントリスナの定義は、通常、画面(HTML/JSPファイル)単位に記述します。ただし、複数画面で共通に利用する場合は、外部ファイルに記述することを推奨します。
外部ファイルの記述については、“外部ファイルの定義”を参照してください。イベントリスナ定義を記述した外部ファイルは、FragmentContainer部品で使用します。FragmentContainer部品の使用方法については、“UI部品リファレンス”を参照してください。
目次 索引 |