LoadURLでロードしたデータをIDで取得できる、LoadURLByIdコマンドを作ってみた。

このエントリをはてなブックマークに追加このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加このエントリをkwoutに追加
2008年4月21日 月曜日21:05:29

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();
        }

        /**
         * 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回試したくらいの危険な橋です。

TrackBack URL :

コメントする

HTML convert time: 1.346 sec.