JAVAC.JP
HOSHI TETSUYA 星鉄矢
2005/07/25
hossy@javac.jp
http://www.javac.jp
Google
WWW を検索 WWW.JAVAC.JP を検索

4-3 EventDispatcher用XMLクラス(もうひとつのonLoadの仕方)

XMLクラスにおけるonLoad時のコールバック設定ですが、EventDispatcherを用いる方法を挙げておきます。
EventDispatcherを用いてonLoadを処理する場合、前述のソースは以下のように変わります。
XMLクラスは非dynamicクラスなので、EventDispatcherのinitializeを行う際、そのままでは各メソッドを追加することができずエラーが出てしまうため、addEventListener,removeEventListener,dispatchEventの各メソッドを空の状態で定義しておきます。
ExXML.as
---
class ExXML extends XML{
    private var ignoreWhite=true
    var addEventListener:Function;
    var removeEventListener:Function;
    private var dispatchEvent:Function;
}
ExXMLクラスを用いるUserListControlクラスにおいて、EventDispatcherを用いてonLoadのコールバックを宣言します。
UserListControl.as
---
import mx.events.EventDispatcher;

class UserListControl{
    private var dataStorage:UserListDataStorage;
    private var mainMc:MovieClip;
    private var ex:ExXML;

    function UserListControl(path:MovieClip){
        mainMc=path;
        dataStorage=new UserListDataStorage();
        loadUserList("GetUsersInfo.cgi");
    }

    private function loadUserList(address:String):Void{
        ex=new ExXML();
        EventDispatcher.initialize(ex);
        ex.onLoad=function(){
            var lo:Object=new Object();
            lo.target=this;
            lo.type="onLoadXML";
            this.dispatchEvent(lo);
        };
        ex.addEventListener("onLoadXML",this);
        ex.load(address);
    }

    public function onLoadXML():Void{
        var arr:Array=ex.firstChild.childNodes;
        for(var i:Number=0;i<arr.length;i++){
            var x:XMLNode=XMLNode(arr[i]);
            if(x.nodeName=="user"){
                var o:Object=x.attributes;
                var index:Number=dataStorage.addUser(o);
                var name:String=dataStorage.getName(index);
                mainMc.addItem(String(index),name);
            }else{
                trace("XMLNode is invalid form.");
            }
        }
        mainMc.setListBoxHandler("onChangeListBox",this);
    }

    public function onChangeListBox(eventObj:Object):Void{
        var index:Number=Number(eventObj.index);
        mainMc.setIdText(dataStorage.getId(index));
        mainMc.setNameText(dataStorage.getName(index));
        mainMc.setAgeText(dataStorage.getAge(index));
        mainMc.setSexText(dataStorage.getSex(index));
        mainMc.setOccupationText(dataStorage.getOccupation(index));
    }
}




BACKTOPNEXT




All Contents Copyright (C) 2005 HOSHI Tetsuya
Home