kagamihogeの日記

kagamihogeの日記です。

Flex の画面遷移

業務アプリではアリガチな処理の一つであるコレ……なのだけど、なんか色々やり方がある。表示してるコンポーネントを切り替える、ってのは簡単に出来るんだけど、画面そのものを別モノに切り替える、っていうちと工夫がいるっぽい。

ちなみにまだ数日しか調査してないんであまり信用せず、下記の文章は参考程度にとどめていただきたい。

ナビゲータコンテナ

にあるように TabNavigator, Accordion, ViewStack 等を使う方法。業務アプリの文脈で使われる画面遷移、とはちょっと違う。とはいえ、ふつーの HTML ベースの web アプリでは画面遷移せざるを得なかった部分を、ナビゲータコンテナ使って遷移しない作りに出来る部分も多いんだろうけどさ。

ModuleLoader

ModuleLoaderを使用した画面遷移について - Flex Wser Group を参考に色々実験してみた。が、今ひとつ画面遷移には適したコンポーネントではないのかも……。

まず、ウチの環境だと、ある操作すると「null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」ってエラーが出る。どうもコンポーネントの配置というか load & unload 周りの書き方が悪いっぽいんだけど、今ひとつわからん。たぶん、下記の説明が原因なんだろうなぁ、ということしか今のところわかってない。

複数のモジュール(あるいは同じモジュールの再ロード)で同じクラスを使う場合に、
ロード元で使用していない場合にエラーになるクラスがいくつかあるようです。

ModuleLoaderを使用した画面遷移について - Flex Wser Group

それと ModuleLoader で load 可能なコンポーネント作るには をトップレベルにせにゃならん。この Module で作られた swf は ModuleLoader が読み込みまでは閲覧不能、つまり単体では動作確認が出来ない。 をイチイチ に変えるとか、開発時には絶対うっとうしいことになることを考えると……ウーン……

SWFLoader

でまぁ、画面を丸ごと別の swf に切り替えたい画面遷移、の場合には SWFLoader を使うと良い……らしい。


■ main.mxml






■ first.mxml



■ second.mxml



んでまぁ、とりあえずこんな感じで各画面を独立した swf として扱える画面遷移できた。Application.application で親となる mxml にアクセスしてしまっているのがミソといえばミソか。あとは画面遷移ロジックを Action Script に切り出せばキレイになるかな。

実は mxml で定義したコンポーネントはぜんぶ public になるっぽいんで上のコードだと Application.application.myLoader.load("*.swf") とか書けてしまう。Flex 的にコレはありなのかな……