このヒントは、XForms に関する特定のタスクについてのヒントです。XFroms についての背景となる情報については、3 回シリーズの「XForms 入門」を参照してください。
このヒントで説明する XForms のサンプルは、(XForms エクステンションをインストールした) Firefox 1.5 と、Formsplayer コントロールをインストールした Microsoft® Internet Explorer 6 でテストされ、動作しています。ダウンロードには、Firefox 用の XHTML ファイルと IE 用の HTML ファイルが含まれています。
XForms は、ページ全体を置き換えなくてもページ内容の定義データを置き換えられる、という意味で、独自のバージョンの Ajax と言うことができます。例えば、カウボーイの知恵 (cowboy wisdom) を記述したページ・スニペットを考えてみましょう。このインスタンスは、リスト 1 のようなものです。
リスト 1. インスタンス・データ
<pearls>
<pearl>
Never ask a barber if he thinks you need a haircut.
</pearl>
<pearl>
Making it in life is kind of like busting broncos. You're
going to get thrown a lot. The simple secret is to keep getting
back on.
</pearl>
<pearl>
Never miss a good chance to shut up.
</pearl>
<pearl>
The quickest way to double your money is to fold it over and
put it back in your pocket.
</pearl>
</pearls>
|
そうすると、次のようなフォームを作ることができます (リスト 2)。
リスト 2. フォーム
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xforms="http://www.w3.org/2002/xforms">
<head>
<title>Instance Data-To-XHTML/XForms Example</title>
<xforms:model id="model_pearls">
<xforms:instance id="instance_model_pearls" src="wisdom.xml"/>
<xforms:submission id="submit_model_pearls"
action="http://localhost/newwisdom.xml"
method="post" replace="instance"
instance="instance_model_pearls"/>
</xforms:model>
<link href="gen_default.css" rel="stylesheet"/>
</head>
<body>
<h1>Cowboy Wisdom</h1>
<xforms:output id="thePearl" ref="/pearls/pearl[2]"
model="model_pearls" />
<xforms:submit submission="submit_model_pearls">
<xforms:label>Get new sayings</xforms:label>
</xforms:submit>
</body>
</html>
|
その結果、図 1 のようなページができます。
図 1. 基本的なページ
output 要素の ref 属性は、位置を含んだ XPath 文であることに注意してください。この XPath 文をコントロールすることによって、このページ上に表示されるものをコントロールすることができます。
ページのコントロールは、実際のデータをコントロールすることによっても可能です。リスト 2 を見て、太字のテキストの部分が submission 要素に関する情報であることに気が付いた人もいると思います。そこでは XForms エンジンに対して、ページではなく、特定のインスタンスを置き換えるように命令しているのです。同じ構造をしているが異なるデータを返す URL へのリクエストを送ることで、即座に新しいデータを得ることができます。例えば Submit ボタンをクリックすると、ブラウザーは別の文書をロードします。出力文は、常にある特定の場所を調べるように設定されているので、そこがフォームに入れるデータのための場所になっています (図 2)。
図 2. ページの一部を置き換える
しかし場合によると、好むと好まざるとに関わらず JavaScript を使わざるを得ないこともあります。例えば、そのデータを使う前に何らかの方法で処理する必要がある、あるいはコントロール外のサイトからのデータを扱う、といった場合です。1 つの選択肢として、JavaScript を使ってデータを取得してから、そのデータをページに追加する方法があります。
重要なことは、単純な HTML ページの場合とは異なり、データを要素に直接追加することはできない、ということです。情報はインスタンスの中に置く必要があり、そうしてから、XForms コントロールの内容を規定する XPath 文を操作するのです。
この例として、「カウボーイの知恵」を繰り返す、2 番目のボタンをページに追加します (リスト 3)。
リスト 3. スクリプトを追加する
...
<body>
<h1>Cowboy Wisdom</h1>
<script type="text/javascript">
var whichPearl = 0;
function choosePearl(){
if (whichPearl == 0) {
whichPearl = 1;
} else if (whichPearl == 1) {
whichPearl = 2;
} else if (whichPearl == 2) {
whichPearl = 3;
} else if (whichPearl == 3) {
whichPearl = 0;
}
refString = "/pearls/pearl["+whichPearl+"]";
theTarget = document.getElementById("thePearl");
theTarget.setAttribute("ref", refString);
}
</script>
<xforms:output id="thePearl" ref="/pearls/pearl[2]"
model="model_pearls" />
<form>
<input type="button" value="Change saying"
onclick="choosePearl();" />
</form>
<xforms:submit submission="submit_model_pearls">
<xforms:label>Get new sayings</xforms:label>
</xforms:submit>
</body>
</html>
|
この関数そのものは単純で、数値に従って次々と繰り返すだけです。実際のアプリケーションであれば、これはおそらくスクリプトであり、その中で Ajax リクエストを行い、戻りデータを処理するはずです。具体的には、各インデックス値に対して、thePearl 要素の ref 属性の中に入る新しいテキストを作成しています。
次に、このスクリプトをコールするための from which を追加します。これでページをリロードすると、ボタンが現れ、このボタンをクリックすることができます。このボタンをクリックして ref 属性を変更する度に、その XPath 文と一致するように、ページは自動的にデータを変更します (図 3)。
図 3. 新しいスクリプト
XForms は、ページ自体をリロードしなくてもページ上のデータを変更できるという意味で、元々 Ajax に似た機能を提供しています。一方で、もしスクリプトを使わざるを得ない場合には、XForms フォームの表示方法を定義する XML データを操作し、必要な変更を外部データを使って行うことができます。
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| Ajax XForms samples | xforms_ajax_source.zip | 4KB | HTTP |
-
ディスカッション・フォーラムに参加してください。
- Ajax と Ajax リクエストに関する素晴らしい入門記事として、Brett McLaughlin による連載記事、「Mastering Ajax」(developerWorks、2005年12月より) を読んでください。
-
このシリーズは、XForms を使い始めるためのガイドとして最適です。
- alphaWorks の Visual XForms Designer について学ぶには、ここから出発してください。
-
developerWorks のXML ゾーンには、XForms や他の XML 技術に関するスキルの向上に役立つ資料が豊富に用意されています。
-
technology bookstore には、この記事や他の技術的な話題に関する本が豊富に取り揃えられています。
