Cairngormをなでる。(ViewLocator)

つづいてViewLocatorをなでておきましょう。

ViewLocator

目的

ASDocによると「ViewLocatorクラスはコマンドが即座に適切なViewHelperを取得する為に使用されます。」とのこと。
動作ロジックでViewHelperを使う時に、ViewLocatorからViewHelperを取得して使うのです。
ViewLocatorはSingletonで実装されてますから、コンストラクタを呼ぶのじゃなくて、getInstance()メソッドを通じてインスタンスを取得します。
(ActionScriptにはprivateなコンストラクタが実装できないようなので、色々ごにょごにょもあるようですが。)
SingletonといったらstaticなメソッドgetInstance。お約束として覚えておくのです。
Singletonってなんじゃいとか思われた方はGoogleせんせにたずねるのがよろしいかと思われます。
はい、話がわき道にそれましたけど、ViewLocatorはViewHelperを登録しておいて、使う時に取得する為のクラスです。
ViewLocatorがあれば、動作ロジックにViewHelperへの参照を持たせる必要がなくなるわけですね。

具体的にはMXMLの中でViewHelperの実装を宣言しておくと、Cairngormのライフサイクルの中で自動的に宣言したidを標準名としてViewHelperがViewLocatorに登録されます。

<mx:Panel layout="absolute"  
		xmlns:mx="http://www.adobe.com/2006/mxml"
		xmlns:viewhelper="viewhelper.*">
	<viewhelper:HogeViewHelper id="hogeViewHelper"/>
</mx:Panel>

こう書いておくと、標準名「hogeViewHelper」でHogeViewHelperがViewLocatorに登録されます。
標準名が重複する場合は、後で指定されたViewHelperで上書きされますので注意です。
それから標準名で登録するということは、ごにょごにょしない限りは(上記の方法の場合は)、ViewLocatorに登録されるHogeViewHelperはひとつです。
同じコンポーネントを複数使うようなアプリケーションの場合は、ごにょごにょする必要があるってことです。

使いどころ

ViewHelperがでてくるところなら多分どこでも。
CommandにHogeViewHelperプロパティを作って、コンストラクタかあるいはSetterでいちいち設定してたら大変です。

使い方

登録は上記の例で。
そして、使う時はこんな感じ。(前回のそのままですが)

				var locator:ViewLocator = ViewLocator.getInstance();
				var hogeViewHelper:IHogeViewHelper = IHogeViewHelper(locator.getViewHelper("hogeViewHelper"));
				hogeViewHelper.moga();

getInstance()で取得したViewLocatorのインスタンスに対して、標準名を指定してgetViewHelper()。
後はお好きに、ということですね。
標準名を知っておく必要があるので、ここは注意です。

ふっと思ったのは、複雑なアプリケーションを作る場合に、Viewに対するFacadeとかを定義しておいて、そのFacadeで使うのもよいのかもですね。
例えば、いろんな画面の表示内容が一気に変わるようなシーンの場合とか、ViewChangeFacadeみたいのを用意しておいて、CommandからはViewChangeFacadeのchangeView()みたいなメソッドをコール。
changeView()の中ではViewLocatorを使って、あれこれViewをへろへろするとCommandの中がすっきりしそうです。
動作速度とかとトレードオフですけどね。
そして、次はModelLocatorかな・・・。

Category: Flex | Posted on: 2007/06/28 14:32 | Viewed: 1471

Comments

No comments yet

Add Comment

:

:
:

TrackBacks

このエントリにトラックバックはありません

TrackBack URL

http://www.azul.systems-noel.jp/trackback/item_31.html