If you see this, you must use any unsupported web browser. Or constructing the page.
この表示が見えている場合、描画処理中です。しばらくお待ちください。 長時間見えている場合は、非対応ブラウザで参照しています。

INTER-Mediator Lab. - Room 1

4. IMでのバインディングの概念

定義ファイルのコンテキスト

INTER-Mediatorで開発するときの定義ファイルに記述する内容のうち、きわめて重要なものが「コンテキスト」と呼ばれるものです。コンテキストは単純な状況では、テーブルそのものという場合があります。つまり、テーブルのデータそのものを1つのコンテキストとして考えるということです。

しかしながら、多くの状況では、テーブル全体を使う事はありません。その一部分のデータが必要です。具体的には一部分というのは、「一部分のレコード」になります。もし、住所録に対して、都道府県が京都府のデータだけを検索するような条件を与えてレコードを取り出すと、単なる誰かの住所録が「京都府に住む人の住所録」というように、意味が付加されます。技術的には検索条件を与えることですが、得られた結果は何らかの意味が増えていることが一般的です。その意味で「コンテキスト」と名付けています。

コンテキストには、データを取り出すテーブル、データを書き込むテーブルを指定できます。取り出しと書き込みが別々の場合があるのだろうか?と思われるかもしれませんが、リレーショナル型データベースでは、データの扱いを柔軟にするため、「検索した状態」をテーブルのように見せるような機能(「ビュー」と呼ばれます)があり、ビューの結果を取り出して、その結果を元のテーブルに書き戻すような場合もあるので、別々の指定になっています。

このデータベースのテーブルの指定に加えて、コンテキストを区別するための名前が必要です。また、コンテキストには、その他のたくさんの指定が可能になっており、アプリケーションに必要な機能の定義をコンテキスト内で行えるようになっています。

定義ファイルの記述方法

最初に、定義ファイルには、コンテキストがあり、名前、データを取り出すテーブル、書き込むテーブルを指定する必要があることを説明しました。それら3つが異なる名前、つまり順に「myaddress」「activeaddr」「address」にしたいとします。このとき、「何の値なのか」を示すキーワードと、指定する値つまり実際にデータベースに設定されているなどしてその時々で変わる値とを、並べて記述することにします。何の値に相当するかを示す決められたキーワードは、順番にname、view、tableとなっており、結果として指定するのは次のような情報となります。

name: myaddress
view: activeaddr
table: address

つまり、決められたキーワードを左側に記述し、コロンをはさんで実際のデータを右に記述します。なお、この記述を実際のファイルとしてどのように表現されているのかについては、以後の作業を「定義ファイルエディタ」を使う上ではほとんど関係ありません。name:と書かれた右のテキストフィールドに「myaddress」とキータイプするだけです。なお、上記の1つのかたまり(コンテキスト)内では、キーワードの順序は問いません。

ここで、viewとtableの記述を省略すると、nameをそのままテーブル名として使います。従って、データベースにaddressという名前のテーブルがある場合、単にそれを使うもっとも簡単な記述は、次のようなものです。もちろん、レコードの取り出しや変更では、いずれも、addressテーブルに対して行われます。

name: address

すなわち、viewやtableに対する値を省略すると、nameの値を利用します。nameは省略できません。

タグ要素に書き込む記述についての説明

データベースにあるaddressテーブルが住所録であるとして、電話番号がtelフィールドにあるとします。このとき、定義ファイルに次のようなコンテキストの定義があるとします。これまでに説明した事に加えて、keyというキーワードの値が増えています。

name: jusho
view: address
table: address
key: id

keyは、addressテーブルの主キーフィルドの名前を指定するものです。レコードを参照するだけだと主キーが何かは不要ですが、ページ上で書き直したデータを元のレコードに書き戻すのに必要になります。

ページファイル、つまり、HTMLファイル側で、addressテーブルのtelフィールドを表示し、かつ編集できるようにテキストフィールドを用意するとします。このとき、HTMLのタグを次のように記述します。

<input type="text" class="IM[jusho@tel]" />

この記述を行い、この後に説明する「ページファイルに必要な記述 」の記述を行うだけで、テキストフィールドに、addressテーブルのtelフィールドの値が表示されます。また、そこで電話番号を書き直して、tabキーを押したフォーカスを離すなどすると、書き直した電話番号が元のフィールドに書き戻されます。

通常のHTMLでの違いは、class属性に IM[...] という記述が加わっていることです。この記述を「ターゲット指定」と呼びます。class属性の内部で記述はとどまっているので、通常は「スタイルシートで定義していないクラス」と判断され、ターゲット指定があることでのレイアウトへの影響はほぼありません。ターゲット指定では、コンテキストのname属性、区切り記号の@、そしてフィールド名を指定します。

もし、電話番号だけをどこかに表示したいのなら、次のような記述をHTMLの中に含めれば良いでしょう。

<span class="IM[jusho@tel]"></span>

たとえば、telフィールドの値が「0123-456-9876」ならば、「<span class="IM[jusho@tel]"> 0123-456-9876 </span>」というタグ要素があるとの同じ結果になります。つまりフィールドの値をそのタグの値として差し込みます。

以上のように、inputなどのフォーム要素をページ内に使いますが、INTER-Mediatorではテキストフィールドに見えている文字列を修正すると、テキストフィールドから離れるときに自動的にデータをデータベースに書き戻します。そのこともあり、FORMタグによる囲みやサブミット後の処理の記述などは一切必要はありません。FORMタグを記述してもかまいませんが、INTER-MediatorはFORMタグ要素に対して何の処理も行いません。

ページファイルに必要な記述

ページファイルでは、タグにどのフィールドと連動するのかということをターゲット指定として記述する事に加えて次の2つの作業が必要です。まず1つは、INTER-Mediator自体をページに取り込むための設定が必要です。JavaScriptで記述した別ファイルの読み込みの設定と同様で、参照先がサーバ上の定義ファイルであるということです。ここまでの例で、定義ファイルがdef.phpというファイル名で保存されていて、ページファイルと同一のディレクトリにあるとします。このとき、ページファイルのヘッダ部に

<script type="text/javascript" src="def.php"></script>

と記述します。INTER-Mediator自体の取り込みに加えて、定義ファイルに記述した内容も同時に取り込みます。

また、ページファイル内を解析してデータベースの内容と合成する作業が必要です。JavaScriptのプログラムを1命令だけ呼び出します。いろいろな方法がありますが、いちばん簡単なのは、ボディ部のBODYタグ要素を次のように記述することです。この場面でのプログラム自体はどんなページでもこれでかまいません。

<body onload="INTERMediator.construct(true);">

プログラムを含むような複雑な処理を組み込む場合は、BODYタグ要素のonload属性ではなく、プログラムを記述する領域に記載することもあります。重要なことは、ページの合成をするために、「INTERMediator.construct(true);」というJavaScriptの呼び出しを最初にHTMLを読み込んだ時よりも後に実行する必要があるということです。

学習時間調査

ログインユーザ:|

読み終わったとき、以下のラジオボタンのいずれかを選択して、「読み終わった」ボタンをクリックしてください。

開いてから今まで、このページを、

ほとんどの時間は読む事に使わなかった
あまり時間をかけて読んではいなかった
他のことと半々くらいの時間をかけて読んだ
多くの時間をかけて読んだ
ほとんどの時間を読む事に使った

このページの内容について、自分が感じる理解度は、

ほとんど分からなかった
少しは分かったが半分以下しか分からなかった
半々くらい
すべては理解できないが半分以上は理解した
ほとんど理解できた

←クリックすると、次のページに移動します。

実験のトップページ(Room 1)へ