Flashvars モジュール化

FlashVars は ActionScript 3.0 からオブジェクトとして処理出来るので、汎用的にモデルクラスにオブジェクト突っ込もうと思ってモジュール作成。

色んなやり方があるとは思うけど、FlashVars の可否に関わらず、view で Event を dispatch しておいて、controller がある場合はそれを model クラスルートクラスが格納する仕組み。これだとすべての view クラスが model の参照を持っている前提で必要な時だけすべての view 系のクラスからいつでもオブジェクトを取得出来るので、key(FlashVars の変数名)さえ渡せばどこでも使用出来る。基本の view が dispatch して controller がそれを listen して model を操作っていう MVC パターンでのモジュール化。

サンプルはドキュメントクラス Main でそこで MVC を作成している例。
(CF ってのは convexstyle framework の略なので気にせず!)

package {
	public class Main extends CFComponentMC {
		import controller.CFController;
		import flash.events.Event;
		import model.CFModel;
		import view.CFView;
		import view.events.FlashvarsEvent;
		public function Main() {
			this.addEventListener(Event.ADDED_TO_STAGE, onInit, false, 0, true);
		}
		private function onInit(evt:Event):void {
			var m:CFModel      = new CFModel();
			var v:CFView         = new CFModel();
			var c:CFController = new CFModel();
			// この FlashvarsEvent を FlashvarsController が listen している
			v.dispatchEvent(new FlashvarsEvent(FlashvarsEvent.SAVE, this.stage.loaderInfo.parameters));
		}
	}
}
package {
	public class FlashvarsController extends CFController {
		import controller.CFController;
		import view.events.FlashvarsEvent;
		public function FlashvarsController() {
			super();
			this._view.addEventListener(FlashvarsEvent.SAVE, handleFlashVarsSave, false, 0, true);
		}
		private function handleFlashVarsSave(evt:FlashvarsEvent):void {
			this._model.flashvars = evt.flashvars;
		}
	}
}

個人的にはこのやり方が気持ちいいな。
取得の際は、key(ここでは test)で取得するだけなので、どの View クラスでも気兼ねなく使える。

if(!ObjectUtil.isNull(this._model.flashvars["test"])) {
    // do action
}

この記事の続きを読む »

ページの一番上へ移動