ステートとは、「ある時点での画面の状態」を示すものです。
各画面は1つ以上のステートをもっていて、デフォルトのステートは「ベースステート」という名前がついています。
ステートは、FlexBuilderのデザインビューのステートビューか、もしくは
ステートは階層構造をもっていて、新規に作成するステートは必ず親ステートをもっています。
(ベースステートは頂点のステートで、すべてのステートはベースステートを基点にします)
ステートは、親のステートに対する差分を記述するような形で作成します。
例えば、ボタンを押されたときに新たにラベルを表示するようなステートを作成したい場合、
ベースステート | |-state1
という階層構造でstate1を作成し、このstate1に「ラベルを追加する」という記述を行います。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*" viewSourceURL="srcview/index.html"> <mx:states> <mx:State name="state1"> <mx:AddChild position="lastChild"> <mx:Label x="283" y="10" text="state1" width="169"/> </mx:AddChild> </mx:State> </mx:states> <mx:Button x="31" y="10" text="ステート切り替え" width="221" id="label1" click="{this.currentState='state1'}"/> </mx:Application>
this.currentStateというのはUIComponentの変数で、各コンポーネントごとにcurrentStateを定義できます。
この変数にステートの名前をいれることでステート切り替えを行います。
ステートの切り替えが発生すると、そのステートのコードが実行されます。上記の場合、state1には
ラベルを追加するという記述がしてある為、画面にラベルが追加されます。
ステートは親との差分なので、
ベースステート | |-state1 | |-state1_1 | |-state2
という階層構造にした場合、state1はベースステート+state1の差分の画面、state1_1はベースステート+state1+state1_1の
差分の画面を表示、という形になります。この場合、state1とstate2は親子関係にないため、state1及びstate1_1で行った画面変更は、
state2では無視されます。逆にstate1で新たに画面変更を追加した場合、state1_1にはその変更が反映されます。
以下にサンプルアプリをあげておきます。
http://www.souko105.net/~hatena/20070208/StateSampleApplication.html
アプリケーションとパネルにステートを設定してあり、相互にステート切り替えを
行うサンプルになっています。