Progression Frameworkのコマンドに、「error」「execute」関数を追加してほしい。
Progression Frameworkのコマンドクラスには、before/afterと言う関数があり、コマンド実行前/後の挙動を定義することが出来る。しかもこれらの関数は最終的にthisを返してくれる。なので、newしてbefore呼んでafter呼んでそのまま実行と言う流れで、一気にコマンドを実行できる。
これは非常に便利な機能だが、LoadURLのようにエラー発生の可能性を秘めたコマンドだと、結局addEventListenerを呼ばなくてはならず、一旦ローカル変数などにコマンドを代入し、例外発生時のイベントリスナーを定義してから実行と言う形になり、少し不便だ。
その不便を解消するために、CommandCatchEvent.ERRORに対するイベントリスナーを定義し、thisを返す関数「error()」と、CommandCatchEvent.EXCEPTIONに対するイベントリスナーを定義し、thisを返す関数「exception()」がほしくなる。
■既存のサンプルの話
Progression Frameworkのサンプルだと、大体が
new Trace("コマンド追加")
);
のように、addCommand関数の中でコマンドを新規作成するケースが多いように思える。
また、各コマンドのASDocにも、
.before( null, trace, [ "テキストデータを読み込みます。" ] )
.after( null, trace, [ "読み込んだデータの内容 :", this.data ] )
.execute();
のように、newしたオブジェクトをそのまま実行するのが正しいと言うようなサンプルが記述してある。
が、例えば上記のコードだと、存在しないURLを読み込んだ場合どうにもならないという欠点がある。
そこで、以下のようなコードを書ける関数、「error」を用意してはどうか?
.before( null, trace, [ "テキストデータを読み込みます。" ] )
.after( null, trace, [ "読み込んだデータの内容 :", this.data ] )
.error(function(e:CommandCatchEvent):void {
trace("エラーを感知しました。シーンを移動します",e);
new Goto(new SceneId("/index/load_error")).execute();
})
.execute();
と言う話だ。
この関数の実装は簡単で、以下のようになっている。
* エラー時の処理を指定
* @param func CommandCatchEventを引数にとる関数。
*/
public function error(func:Function):LoadURLById {
this.addExclusivelyEventListener(CommandCatchEvent.ERROR, func);
return this;
}
これと同じように、CommandCatchEvent.EXCEPTIONに対するリスナー登録するexception()も作れる筈だ。
早速、自作コマンド「LoadURLById」に組み込んで試してみよう。




