Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Загрузка данных в другом классе (http://www.flasher.ru/forum/showthread.php?t=211282)

AlexAS3 26.07.2015 18:41

Загрузка данных в другом классе
 
Как грамотно реализовать загрузку данных (json с сайта) в другом классе?
Основной должен получать 2 переменные:
_polyW = data.getPolyWidth();
_polyH = data.getPolyHeight();

а загрузка происходит в другом классе следующим образом:
Код AS3:

public class OnlineData extends Sprite
        {
                private var _polyWidth:int;
                private var _polyHeight:int;
                private var myLoader:URLLoader;
 
                public function OnlineData()
                {
 
                        var json_URL:String = "http://***";                       
                        var myJSONURL:URLRequest = new URLRequest(json_URL);                       
                        myLoader = new URLLoader(myJSONURL);
                        myLoader.addEventListener(Event.COMPLETE, jsonLoaded, false, 0, true);
                }
                public function getPolyWidth():int
                {
                        return _polyWidth;
                }
                public function getPolyHeight():int
                {
                        return _polyHeight;
                }
 
                private function jsonLoaded(event:Event):void
                {
                        myLoader.removeEventListener(Event.COMPLETE, jsonLoaded);                       
                        var myJSON:String = String(myLoader.data);
                        trace (myJSON);
                        var json_data:Object=com.adobe.serialization.json.JSON.decode(myJSON);       
                        //проверка, есть ли такие свойства
                        if (json_data.hasOwnProperty("width") && json_data.hasOwnProperty("height"))
                        {                                       
                                _polyWidth = int(json_data["width"]);
                                _polyHeight = int(json_data["height"]);       
                                trace (_polyWidth);
 
                        }                               
                }
        }

получается, что данные загружаются уже после того, как срабатывают функции
_polyW = data.getPolyWidth();
_polyH = data.getPolyHeight();
так как trace выдает все правильно, но polyW и PolyH нулевые.

Как сделать, чтобы данные попадали в другой класс?

alexandrratush 26.07.2015 18:53

Может быть после получения и обработки данных диспатчить событие, и потом только забирать свойства getPolyWidth и getPolyHeight?

AlexAS3 01.08.2015 23:36

Цитата:

Сообщение от alexandrratush (Сообщение 1185267)
Может быть после получения и обработки данных диспатчить событие, и потом только забирать свойства getPolyWidth и getPolyHeight?

Можете подсказать, как это сделать? Или где об этом хорошо написано? Что-то не нашел нужной информации (

Wolsh 02.08.2015 00:31

Код AS3:

        public class OnlineData extends EventDispatcher
        {
                public const DATA_LOADED:String = "dataLoaded";
                private var _polyWidth:int;
                private var _polyHeight:int;
                private var myLoader:URLLoader;
 
                public function OnlineData()
                {
                }
                public function load():void
                {
                        var json_URL:String = "http://***";                       
                        var myJSONURL:URLRequest = new URLRequest(json_URL);                       
                        myLoader = new URLLoader(myJSONURL);
                        myLoader.addEventListener(Event.COMPLETE, jsonLoaded, false, 0, true);
                }
                public function get polyWidth():int
                {
                        return _polyWidth;
                }
                public function get polyHeight():int
                {
                        return _polyHeight;
                }
 
                private function jsonLoaded(event:Event):void
                {
                        myLoader.removeEventListener(Event.COMPLETE, jsonLoaded);                       
                        var myJSON:String = String(myLoader.data);
                        trace (myJSON);
                        var json_data:Object=com.adobe.serialization.json.JSON.decode(myJSON);       
                        //проверка, есть ли такие свойства
                        if (json_data.hasOwnProperty("width") && json_data.hasOwnProperty("height"))
                        {                                       
                                _polyWidth = int(json_data["width"]);
                                _polyHeight = int(json_data["height"]);       
                                trace (_polyWidth);
                                dispatchEvent(new Event(DATA_LOADED));
                        }                               
                }
        }

В "другом классе" (пример использования):
Код AS3:

private var _onlineData:OnlineData = new OnlineData();
_onlineData.addEventListener(OnlineData.DATA_LOADED, onDataLoaded);
_onlineData.load();
//...
private function onDataLoaded(event:Event):void
{
        trace("- - - - - - - - - - - - - - -");
        trace(_onlineData.polyWidth);
        trace(_onlineData.polyHeight);
}



Часовой пояс GMT +4, время: 20:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.