LoadURLでロードしたデータをIDで取得できる、LoadURLByIdコマンドを作ってみた。
Progression Frameworkで、外部データを読み込む時に使うLoadURLコマンドだが、データをID管理するのはどうかというアイデアがフォーラムに出ていたので、便利そうだしちょっと試しに実装してみた。
ただ、プロパティdataをSceneObjectに持たせるのは難しそうだったので、取り敢えずコマンドの方にクラス変数として持たせ、IDを使って取得できるようにしてみた。
そんなわけでソースはこんな感じ。基本的にはLoadURLと同じなので、子クラスとして定義。
パッケージ名は適当に変更して使うのがよいかと。
package org.tarotaro.flash.progression.commands {
import flash.net.URLRequest;
import flash.utils.Dictionary;
import jp.progression.commands.LoadURL;
/**
* ID管理可能なLoadURLコマンド
* @author tarotarorg
*/
public class LoadURLById extends LoadURL {
/**
* データを保管するDictionaryオブジェクト
*/
private static var LOADED_DATA:Dictionary = new Dictionary();
/**
* 管理用ID
*/
private var _id:String;
/**
* データをID管理可能なLoadURLコマンド
* @param id データのID
* @param request リクエスト
* @param delay 処理遅延
*/
public function LoadURLById(id:String, request:URLRequest = null, delay:int = 0 ) {
super(request, delay);
this._id = id;
LOADED_DATA[id] = null;
}
protected override function _executeComplete():void {
LOADED_DATA[this._id] = this.data;
super._executeComplete();
}
import flash.net.URLRequest;
import flash.utils.Dictionary;
import jp.progression.commands.LoadURL;
/**
* ID管理可能なLoadURLコマンド
* @author tarotarorg
*/
public class LoadURLById extends LoadURL {
/**
* データを保管するDictionaryオブジェクト
*/
private static var LOADED_DATA:Dictionary = new Dictionary();
/**
* 管理用ID
*/
private var _id:String;
/**
* データをID管理可能なLoadURLコマンド
* @param id データのID
* @param request リクエスト
* @param delay 処理遅延
*/
public function LoadURLById(id:String, request:URLRequest = null, delay:int = 0 ) {
super(request, delay);
this._id = id;
LOADED_DATA[id] = null;
}
protected override function _executeComplete():void {
LOADED_DATA[this._id] = this.data;
super._executeComplete();
}
/**
* IDをキーとしてロード後のデータを取得する。
* @param id
* @return
*/
public static function getDataById(id:String):Object {
return LOADED_DATA[id];
}
public function get id():String { return _id; }
}
}
使い方はこんな感じで。
- 呼び出し時
-
addCommand(
new LoadURLById("id_001",new URLRequest("http://??"))
); - 使用時
-
var data:Object;
data = LoadURLById.getDataById("id_001");
trace(data);
でもって、テストは成功したのを1回試したくらいの危険な橋です。
カテゴリ:ActionScript |Progression




