Flexアプリケーションの実行
FlexアプリケーションはWebブラウザ上で実行できます。FlexアプリケーションのURLはFlexをどのようにインストールしたかによって異なりますが、FlexをMacromedia JRunサーバーと統合してインストールした場合のURLは次のようになります。
http://localhost:8700/flex/
なお、このチュートリアルで作成するアプリケーションは、次のURLでアクセスできるようにします。
http://localhost:8700/flex/flex_tutorials/firstapp.mxml
「8700」の部分はFlexが稼働するポートの番号を示しています。なおFlexをJRunのフルバージョンや、その他のJ2EEアプリケーションサーバー上にインストールした場合は、このポート番号を変更する必要があります。
アプリケーションの作成
これから作成する簡易版のショッピングカートでは、コーヒーのブレンドの一覧をComboBox
(HTMLのselect
コントロールのようなもの)を利用して表示することにします。また、データバインディングを利用して、ユーザーがブレンドを選択すると選択したブレンドの詳細が表示されるようにします。さらに、クリック時のハンドラを設定したButton
を利用して、ショッピングカート機能のList
コントロールに選択したブレンドが追加されるようにします。
カートを構築することによって、つぎにあげる項目の使用法が習得できます。
Application
クラスPanel
コンテナScript
要素Array
要素Object
要素Label
要素Text
要素Button
コントロールComboBox
コントロールList
コントロールActionScript
関数
Applicationオブジェクトの作成
Flexアプリケーションのコードは、XMLの宣言とApplication
ブロックから始まります。Application
タグの中には、つぎに示すMXクラスライブラリの名前空間宣言を記述します。
xmlns:mx="http://www.macromedia.com/2003/mxml"
なお、接頭辞のmx
はこのライブラリのすべてのタグに対して使用します。
- 新規ファイルを作成し、ファイルを「flex_tutorials」ディレクトリに「firstapp.mxml」として保存します。
- ファイルの最初に、つぎのXML宣言を追加します。
- XML宣言のつぎに、MXML名前空間の指定の入った
Application
タグを追加します。
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml"> </mx:Application>
アプリケーションをレイアウトするためのPanelの追加
Flexアプリケーションの中で表示するテキストやコントロール、画像、各種メディアなどといった視覚要素は、通常、これらの入れ物となる「コンテナ」の中に配置します。ここでは、Panel
という種類のコンテナを使用することにします。Panel
コンテナは、アプリケーションの視覚要素全体を囲む場面で利用します。また、ここではPanel
コンテナのtitle
属性も指定します。title
属性に設定した値は、パネル上部に自動的に含まれるタイトルバーに表示されます。
Application
ブロックの中にPanel
ブロックを追加し、title
属性の値を「My First Flex App」とします。
<mx:Panel title="My First Flex App"> </mx:Panel>
ビューの見出しとなるLabelの追加
単行のテキストを表示する際には、Label
要素を使用します。Label
要素には数々のプロパティがありますが、ここではラベル内に表示するテキストを指定するためのtext
属性を使用します。
Panel
ブロックの中にLabel
要素を追加し、属性を次のように設定します。- ファイルを保存し、アプリケーションをブラウズしてみます。
<mx:Label text="Coffee Blends"/>
コーヒーブレンドの種類を定義するオブジェクト配列の追加
このアプリケーションのデータモデルとして、オブジェクトの配列をArray
要素とObject
要素を利用してアプリケーション内に作成します。各オブジェクトにはlabel
とdata
の2つのプロパティがあり、これらはオブジェクトのサブタグとして定義します。ここで定義するデータ構造は、後ほど紹介するComboBox
やList
などのコントロールが利用するdataProvider
に対応しています。
コントロールは、このチュートリアルで利用するデータオブジェクトよりはるかに複雑なものを扱えますが、ここではデータモデルをつぎに示す構文を利用した簡単なものにします。
<mx:Array id="identifier"> <mx:Object> <label>literal string</label> <data>another literal string</data> </mx:Object> </mx:Array>
id
属性は、Flexクラスのほとんどにおいて使用でき、クラスのインスタンスに対して固有の識別子を設定する際に利用します。なお、このid
の値は、データバインディングやActionScriptを利用してオブジェクトを参照しない限り、設定する必要がありません。
配列のような不可視の要素は、アプリケーションの任意の位置に記述できますが、コードの初めの方(視覚的な要素の前)に配置することが望ましいでしょう。
Application
ブロックの中のPanel
の前に、つぎのオブジェクト配列を追加します。
<mx:Array id="coffeeArray"> <mx:Object> <label>Red Sea</label> <data>Smooth and fragrant</data> </mx:Object> <mx:Object> <label>Andes</label> <data>Rich and pungent</data> </mx:Object> <mx:Object> <label>Blue Mountain</label> <data>Delicate and refined</data> </mx:Object> </mx:Array>
コーヒーブレンドの種類を表示するComboBoxの追加
FlexのComboBox
はHTMLのselect
コントロールに似ていますが、HTMLよりパワフルな機能を提供します。アイテムを表示するには、dataProvider
プロパティに値やオブジェクトの配列を設定します。この際、dataProvider
ブロックの中で配列を作成することもできますが、データを別の場所で作成/インポートし、このデータをdataProvider
プロパティにバインドする方が実用的といえます。
<mx:ComboBox id="myCombo" dataProvider="{myArray}"/>
上のコードの波括弧({ }
)は、括弧内のコンテンツが単なる文字列ではなく、評価を必要とする式や変数であることをコンパイラに指示します。
なお、オブジェクトにlabel
プロパティやdata
プロパティが含まれている場合、これらは自動的に表示アイテムや関連付けられたデータとして利用されます。この際データ型は、単なるスカラー値だけでなく、オブジェクトのように複雑なタイプでも問題ありません。オブジェクトにlabel
プロパティやdata
プロパティが含まれていない場合は、オブジェクト全体がアイテムのdata
プロパティとして利用され、ラベルの値はComboBox
のlabelField
プロパティによりオブジェクトの任意のプロパティに設定することができます。
Label
要素の後にComboBox
コントロールを追加して、id
を「coffeeCombo」とし、dataProvider
プロパティを利用してComboBox
を以前の手順で作成した「coffeeArray」にバインドします。
<mx:ComboBox id="coffeeCombo" dataProvider="{coffeeArray}"/>
アイテムの説明文を表示するTextコントロールの追加
Text
コントロールはLabel
と似ていますが、Text
コントロールは複数行にまたがるデータを表示することができます。ここでは、ユーザーがComboBox
で選択したアイテムの説明文が表示されるよう、Text
コントロールを選択したアイテムに関連づけられたデータオブジェクトとバインドします。なお、データオブジェクトはComboBox
のselectedItem
プロパティで参照します。
ComboBox
の後にText
コントロールを追加し、text
プロパティを文字列の「Description:」に設定します。そして、ComboBox
で選択されたアイテムのdata
プロパティへのバインドを追加します。
<mx:Text text="Description: {coffeeCombo.selectedItem.data}"/>
コーヒーブレンドをショッピングカートに入れるためのボタンの追加
Button
コントロールの使い方は簡単です。Button
コントロールにはラベル文字列を表示するためのlabel
プロパティや、ユーザーがボタンをクリックした際に実行されるイベントハンドラを設定するためのclick
プロパティがあります。
ここでは、ボタンを追加し、ボタンのクリックイベントがaddToCart()
という名前の関数を呼び出すことによって、ComboBox
で選択したアイテムが簡易ショッピングカートに追加されるようにします。なお、関数とショッピングカートは後ほど作成します。
Text
コントロールの後にButton
を追加し、ボタンのlabel
を「Add to Cart」に、そしてclick
イベントがaddToCart()
関数を呼び出すように、それぞれ設定します。
<mx:Button label="Add to Cart" click="addToCart()"/>
ショッピングカートのためのListコントロールの追加
List
コントロールはComboBox
とほぼ同じですが、List
コントロールの場合、複数のアイテムを同時に表示/選択することができます。次のコードのList
コントロールにはdataProvider
プロパティの指定がありません。これは、ユーザーがアイテムをList
コントロールに追加するまで、このコントロールが空の状態だからです。
Button
の後にList
コントロールを追加し、id
を「cart」に設定します。
<mx:List id="cart"/>
ボタンのClickイベントを処理するスクリプトの追加
このチュートリアルの最後のステップは、ボタンのClick
イベントを処理するActionScript関数の記述です。このチュートリアルでは、ActionScript関数をScript
ブロックの中に記述します。
Script
ブロックの中に配置するActionScriptコードは、<![CDATA[ ]]>
で囲み、XMLパーサーがこの中のコンテンツを解析しないように明示しておきます。このテクニックはXMLを扱う際の標準的な手法ですが、ここでは、パーサーがスクリプト内に含まれている特殊文字(<記号など)をXMLのコードと混乱しないようにするために使用します。なお、このチュートリアルアプリケーションのコードに混乱の原因となり得る特殊文字は含まれていませんが、埋め込みスクリプトのコードは常にCDATA
の中に記述する習慣をつけておくことが大切です。このコーディングテクニックは、パーサーがXML以外のコードを解析する手間を省く効果もあります。
ここで使用するActionScriptはごく単純な物です。なお、ActionScriptの関数はつぎに示す構文で記述します。
function functionName(parameter1:dataType...):returnDataType
{
[ActionScript のステートメント]
}
addToCart()
関数の中には、label
とdata
の2つの引数を受け付ける、List
クラスのaddItem()
メソッドを使用します。ここで渡す2つの引数は、単に、ComboBox
で選択したアイテムのlabel
プロパティとdata
プロパティです。
Array
ブロックの後にCDATA
の部分をネストしたScript
ブロックを追加します。CDATA
の中に、戻り値のないaddToCart()
という名のActionScript関数を追加します。function
ブロックの中にaddItem
メソッドを追加し、cart
ListにComboBox
で選択されたアイテムのlabel
プロパティとdata
プロパティが追加されるようにします。- ファイルを保存して、Webブラウザでファイルの動作を確認します。(MXMLファイルのブラウズ方法が分からない場合は、こちらの解説を参照してください。)
<mx:Script> <![CDATA[]]> </mx:Script>
function addToCart():Void
{
}
cart.addItem(coffeeCombo.selectedItem.label, coffeeCombo.selectedItem.data);
<?xml version="1.0"?> <mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" > <!-- データモデル --> <mx:Array id="coffeeArray"> <mx:Object> <label>Red Sea</label> <data>Smooth and fragrant</data> </mx:Object> <mx:Object> <label>Andes</label> <data>Rich and pungent</data> </mx:Object> <mx:Object> <label>Blue Mountain</label> <data>Delicate and refined</data> </mx:Object> </mx:Array> <mx:Script> <![CDATA[ function addToCart():Void { cart.addItem(coffeeCombo.selectedItem.label, coffeeCombo.selectedItem.data); } ]]> </mx:Script> <!-- ビュー --> <mx:Panel title="My First Flex App"> <mx:Label text="Coffee Blends"/> <mx:ComboBox id="coffeeCombo" dataProvider="{coffeeArray}"/> <mx:Text text="Description: {coffeeCombo.selectedItem.data}"/> <mx:Button label="Add to Cart" click="addToCart()"/> <mx:List id="cart"/> </mx:Panel> </mx:Application>
つぎのステップ
このチュートリアルの簡単なアプリケーションでは、コンテナやコントロール、データモデル、データバインディング、イベントハンドラといったFlexアプリケーションの主要パーツを紹介してきました。是非つぎのチュートリアルに進み、さらにFlexの習得を深めてください。
このチュートリアルの内容にご関心をお持ちいただけた場合は、Flexにデフォルトで含まれているサンプルアプリケーションなども一度目を通すようにしてください。Flexの搭載機能をデモするサンプルが多数収録されています。このチュートリアルシリーズのパート2、「Flex電卓アプリケーションの作成」も続けてオンライン上でご覧いただけます。