| 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.НУЖНЫЙ_УРЛ.
Как Вы считаете, нормально ли создан этот механизм? Возможно, лучше как-то по другому?
Буду очень благодарен советам.
|