Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: объясните логику работы событий
Flash Zone Forum > Macromedia Flash > ActionScript
tiHo
Есть класс: (LoadAppInfo.as) :

Код
package  
{

    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    
    /**
     * ...
     * @author tihoho
     */
    public class LoadAppInfo
    {
        private var loader:URLLoader;
        private const urlProductPath:String = "../src/data.xml";
        private var massNames:Array = [];
        private var LOADED:Boolean = new Boolean(false);
//-------------------------------------------------------
        public function LoadAppInfo():void
        {
            loader = new URLLoader(new URLRequest(urlProductPath));
            loader.addEventListener(Event.COMPLETE, productListLOADED);
        }
//-------------------------------------------------------
        public function get isLOADED() : Boolean
        {
            return LOADED;

        }
//--------------------------------------------------------
        private function productListLOADED(e:Event):void
        {
            var xml:XML = new XML(e.target.data);
            
            for each (var tmp:XML in xml.product)
            {
                massNames.push(tmp.name);
            }
            LOADED = new Boolean(true)
            
        }
//--------------------------------------------------------
        public function get getNamesList():Array
        {
            return massNames;
        }
//--------------------------------------------------------
//--------------------------------------------------------
        
    }

}


А вот так я его пытаюсь использовать:

Код
package
{

    import flash.display.Sprite;
    import flash.text.TextField;
    import LoadAppInfo;
    

    public class Main extends Sprite
    {
// -----------------------------------------------------------------

        
        private var txt:TextField;
        private var appdata:LoadAppInfo;
        
// -----------------------------------------------------------------
        public function Main():void
        {
            txt = new TextField();
            txt.width = stage.stageWidth;
            txt.height = stage.stageHeight;
            addChild(txt);
            
            appdata = new LoadAppInfo();
            
            if (appdata.isLOADED)
            {
                txt.text = appdata.getNamesList.join('\n')
            } else
            {
                txt.text = "печалька.";
            }
        }
// ----------------------------------------------------------------

    }
    
}


Но "почему-то" выводит печальку.

Что я не так делаю, объясните пожалуйста.
chingachgoog
Первая ошибка в том, что печалька (Main) работает по схеме синхронного кода, тогда как LoadAppInfo имеет асинхронный код.

Для начала, можно блок if (appdata.isLOADED) повесить в метод на кнопку. Чтоб так сказать почувствовать работу асинхронности.
А уже далее по уму делать взаимодействие Main и LoadAppInfo по-настоящему асинхронным.
Русская версия IP.Board © 2001-2013 IPS, Inc.