さて、いよいよ本題に入ります。
データとビューを結び付けることにより、OpenLaszlo の真の威力が発揮されるのです。
<canvas debug="true">
<dataset name="myData">
<myXML>
<person name="jon" />
<person name="vick" />
<person name="carter" />
</myXML>
</dataset>
<simplelayout />
<text datapath="myData:/myXML/person/@name"/>
</canvas>
表示結果は、jon / vick / carter という3行になるはずです。
<dataset> 要素を使って、1セットのデータを定義します。
内部には XML形式あればどんな形式のデータでも配置することができます。
これを「データセット」と呼びます。
全ての基底クラスである LzNode <node> には、datapath という属性が定義されています。
これを指定することによって、ビューとデータを関連付けることができます。
上の例では、text要素の datapath が myData:/myXML/person/@name となっています。
先頭の myData は <dataset> で定義した名前に合わせます。: でつないで、それ以降が XPath 形式のパスになります。
XPath については他に様々な資料があると思いますので説明を省きます。
今回の例では、myXML というルート要素内の、person という要素内の、name属性が対象となります。
データセット展開後のlzxは以下と同等になります。
<canvas debug="true"> <simplelayout /> <text text="jon" /> <text text="vick" /> <text text="carter" /> </canvas>
先程紹介した例は、Embedded(埋め込み)方式の構文です。
他に、外部ファイルからのIncluded方式と実行時にデータをバインドするHTTP形式があります。
一番わかりやすい、lzxファイル内に直接データ内容を記述する方法です。
<dataset name="myData">
<myXML>
<!-- ... other XML tags ... -->
</myXML>
</dataset>
外部ファイルにデータ内容を記述する方法です。
ただしデータバインドはコンパイル時に行われます(C言語のincludeと同じ)。
つまり、外部ファイルの内容はlzxコンパイル時に読み込まれ、
swf作成後に外部ファイルを修正してもその内容が読み込まれることはありません。
<dataset name="myData" src="myXMLDoc.xml"/>
HTTP経由でデータをバインドさせます。
この方法は、完全な動的バインディングを実現します。
一般的に src には jsp などの CGIアドレスを使うことになるでしょう。
<dataset name="myData" request="true" type="http" src="myXMLDoc.xml" />