Pop-Out

import as.utils.Delegate;
import as.utils.DoLater;
class XmlData extends MovieClip
{
    private var stage:MovieClip
    private var xml_data:XML
    
    
    function XmlData(mc:MovieClip)
    {
        trace("[XmlData.as] - XmlData() :: ")
        stage = mc
    }
    public function loadData(xml_file:String, fnc:Function, scope:Object):Void
    {
        trace("[XmlData.as] - loadData() :: xml_file: " + xml_file)
        trace("[XmlData.as] - loadData() :: scope: " + scope)
        xml_data = new XML()
        xml_data.ignoreWhite = true
        xml_data.onLoad = Delegate.create(this, _onLoad, fnc, scope)
        xml_data.load(xml_file)
    }
    
    private function _onLoad(success:Boolean, callback:Function, scope:Object)
    {
        trace("[XmlData.as] - _onLoad() :: " + scope)
        if (success)
        {
            callback.apply(scope)
        }
        else
        {
            trace("[XmlData.as] - _onLoad() :: Error loading xml")
        }
    }
    
    public function getData()
    {
        trace("[XmlData.as] - getData() :: " + this)
        return xml_data
    }
    
    public function toString():String
    {
        return "[Class XmlData]"
    }
}

// ===============================================
class Test
{
    private var myData:XmlData
    
    function Test(stage)
    {
        trace("[Test.as] - Test() :: Constructed.")
        myData = new XmlData(stage)
        myData.loadData("hiroik_menu_.xml", draw, this)
    }
    
    private function draw()
    {
        trace("[Test.as] - draw() :: " + this)
        trace(myData.getData())
    }
    
    public function toString():String
    {
        return "[Class Test]"
    }
}

Cut-N-Paste