Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Загрузка файлов конфигурации (http://www.flasher.ru/forum/showthread.php?t=130574)

Night_rainbow 29.09.2009 12:48

Загрузка файлов конфигурации
 
Доброго все времени суток!
Подскажите, пожалуйста, как кто осуществляет это дело. Речь идет о том, чтобы всяческие url загружать из xml-файла, лежащего на сервере. Я сделал это таким образом.

DataConstants.as - содержит все url. Получает их он с сервера в виде xml-файла посредством HttpService. Когда ответ от сервера приходит и все переменные проинициализированы, он диспатчит событие DOWNLOAD_COMPLETE.

Код AS3:

public class DataConstants extends EventDispatcher{
    private var _confXML:XML;
    public var AMF_CONNECTION_URL:String;
    public var UPLOAD_CONNECTION_URL:String;
    public var UPLOAD_TEMP_CONNECTION_URL:String;
 
    public function DataConstants() {
 
    }
 
    public function init():void {
        if (!_confXML) {
            var request:HTTPService = new HTTPService();
            request.url = "config/xml/net_connection_urls.xml";
            request.resultFormat = "e4x";                // E4X for easy data access.
            request.contentType = "application/xml";
            request.addEventListener(ResultEvent.RESULT, propertyReaderResultHandler);
            request.addEventListener(FaultEvent.FAULT, propertyReaderFaultHandler);
            request.send();
        }
    }
 
    private function propertyReaderResultHandler(event:ResultEvent):void {
        _confXML = XML(event.result);
        AMF_CONNECTION_URL = _confXML.property.(name == "amfChanel").value;
        UPLOAD_CONNECTION_URL = _confXML.property.(name == "uploadHandler").value;
        UPLOAD_TEMP_CONNECTION_URL = _confXML.property.(name == "uploadTemp").value;
        dispatchEvent(new UtilsEvent(UtilsEvent.DOWNLOAD_COMPLETE));
    }
 
 
 
    private function propertyReaderFaultHandler(event:FaultEvent):void {
        if(event){
        Alert.show(event.fault.message, "Could not load properties XML file.");
        }
    }
}
}

SessionObject.as - просто содержит ссылку на DataConstants. Он слушает событие DOWNLOAD_COMPLETE от DataSource и когда оно приходит, диспатчит ALL_DOWNLOAD_COMPLETE.

Код AS3:

public class SessionObject extends EventDispatcher{
    public function SessionObject() {
    }
 
    private static var _dataConstants:DataConstants;
 
    public function init():void{
        _dataConstants = new DataConstants();
        _dataConstants.addEventListener(UtilsEvent.DOWNLOAD_COMPLETE,handlerDownloadComplete);
        _dataConstants.init();
    }
 
    public static function get dataConstants():DataConstants{
          return _dataConstants;
    }
 
    private function handlerDownloadComplete(event:UtilsEvent):void{
        dispatchEvent(new UtilsEvent(UtilsEvent.ALL_DOWNLOAD_COMPLETE));
    }
}
}

MedDownloadProgressBar.as - он при получении события INIT_COMPLETE создает SessionObject, добавляет слушателя на событие ALL_DOWNLOAD_COMPLETE и вызывает у него метод init(). Когда получает событие ALL_DOWNLOAD_COMPLETE посылает Event.COMPLETE, информируя о том, что приложение загружено.

Код AS3:

public class MedDownloadProgressBar extends DownloadProgressBar{
    public function MedDownloadProgressBar() {
        super();
        initializingLabel = "Initializing App...";
 
        MINIMUM_DISPLAY_TIME = 2000;
        //loadResources();
 
 
    }
 
    override protected function showDisplayForDownloading(elapsedTime:int, event:ProgressEvent):Boolean{
        return true;
    }
    override protected function showDisplayForInit(elapsedTime:int, count:int):Boolean{
        return true;
    }
 
    override public function set preloader(value:Sprite):void
        {
 
 
                value.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                value.addEventListener(Event.COMPLETE, completeHandler);
 
                value.addEventListener(RSLEvent.RSL_PROGRESS, rslProgressHandler);
                value.addEventListener(RSLEvent.RSL_COMPLETE, rslCompleteHandler);
                value.addEventListener(RSLEvent.RSL_ERROR, rslErrorHandler);
 
                value.addEventListener(FlexEvent.INIT_PROGRESS, initProgressHandler);
                value.addEventListener(FlexEvent.INIT_COMPLETE, loadResources);
        }
 
    private function loadResources(event:Event):void{
        var sess:SessionObject =new SessionObject();
        sess.addEventListener(UtilsEvent.ALL_DOWNLOAD_COMPLETE,completeAll);
        sess.init();
    }
 
    private function completeAll(event:Event):void{
        dispatchEvent(new Event(Event.COMPLETE));
    }
 
 
 
}
}

После этого, доступ ко всем урл из флекса идет через SessioObject.dataConstants.НУЖНЫЙ_УРЛ.

Как Вы считаете, нормально ли создан этот механизм? Возможно, лучше как-то по другому?
Буду очень благодарен советам.

GBee 29.09.2009 14:06

Ага, если вам нравится и если это работает. А время идет...

Night_rainbow 29.09.2009 14:47

Спасибо за отклик! :)

Цитата:

А время идет...
Что Вы имели ввиду?


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

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