PDA

Просмотр полной версии : Проблема при использовании своей написанной библиотеки подключаемой к Flex проекту


chidori
03.08.2009, 21:55
Доброй всем сети.
Итак к сути:
Создаю свою библиотеку (swc) там есть пока что ровно один класс.
Класс реализует подгрузку xml файла, через URLLoader, в конструктор передается путь до файла который запихивается в проперти класса.
Далее в проекте подключаю эту библиотеку создаю экземпляр класса передаю в конструктор путь, и... ничего не происходит.

Точнее: написал листнер для события Event.COMPLETE и он его на первый взгляд не обрабатывает(ну так нам говорит геттер из mxml когда я его запускаю), но если внутри моего класса делать Alert.show то он нормально показывает что листнер обрабатывается.
В чём может быть проблема? оО

iflamberg
03.08.2009, 22:06
так не скажешь. Ставьте трейсы через каждый шаг, смотрите, где происходит стоп или запускайте дебаг.
А что происходить-то должно?

chidori
03.08.2009, 23:22
он должен возвращать мне xml-файл мой :)
а трейс не помагает, дебаг даже не ругается

Добавлено через 10 часов 1 минуту
Выходит примерно так:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import ru.chidori.utils.ConfigLoader;

[Bindable]
public var cfg : ConfigLoader;

private function init():void
{
cfg = new ConfigLoader("data/config.xml");
Alert.show(cfg.message);
}

]]>
</mx:Script>

</mx:Application>


и библиотечный класс:

/**
* @author : chidori
*
**/
package ru.chidori.utils
{
import flash.events.*;
import flash.net.*;

public class ConfigLoader
{


private var _configFileLocation:String;

public function get configFileLocation():String
{
return _configFileLocation;
}

public function set configFileLocation(value:String):void
{
_configFileLocation = value
}

private var _message:String;

public function get message():String
{
return _message;
}

public function set message(value:String):void
{
_message = value;
}

/**
*
* Конструктор
*
**/
public function ConfigLoader(cfgFileLocation:String)
{
configFileLocation = cfgFileLocation;
loadFile();
}

private function loadFile():void
{
var urlRequest:URLRequest;
var urlLoader:URLLoader;

urlRequest = new URLRequest(configFileLocation);
urlLoader = new URLLoader();

configureListeners(urlLoader);
urlRequest.method = URLRequestMethod.POST;

try {
urlLoader.load(urlRequest);
} catch(error:Error) {
this.message = "Не могу загрузить: "+configFileLocation;
}

}

/**
*
* Метод для конфигурации листнеров для объекта URLLoader
*
**/
private function configureListeners(dispatcher:IEventDispatcher):void
{
// добавляем листнеры для объекта URLLoader
dispatcher.addEventListener(Event.COMPLETE, urlLoaderCompleteHandler);
dispatcher.addEventListener(Event.OPEN, urlLoaderOpenHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, urlLoaderProgressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, urlLoaderSecurityErrorHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, urlLoaderHttpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, urlLoaderIOErrorHandler);
}

private function urlLoaderCompleteHandler(event:Event):void
{
this.message = "Загрузил! :)";
}

private function urlLoaderOpenHandler(event:Event):void
{
//
}

private function urlLoaderProgressHandler(event:ProgressEvent):void
{
//
}

private function urlLoaderSecurityErrorHandler(event:SecurityErrorEvent):void
{
//
}

private function urlLoaderHttpStatusHandler(event:HTTPStatusEvent):void
{
//
}

private function urlLoaderIOErrorHandler(event:IOErrorEvent):void
{
//
}

}
}

При запуске выдает пустой Alert.
Хотя если вызывать такой алерт прям из листнера, а не проперти присваивать, то выдает он правильно(внутри класса получается), такое ощущение что область видимости бредит.

Lou
04.08.2009, 12:08
А по-моему, ошибка здесь:
cfg = new ConfigLoader("data/config.xml");
Alert.show(cfg.message);
xml еще не загрузился, а Вы уже message тянете...

AlexStukoff
04.08.2009, 16:06
Lou +1

ConfigLoader должен диспатчить событие о успешной загрузке данных, на которое вы подпишитесь в основном проекте. И вот в обработчике этого события уже и обращайтесь к cfg.message

chidori
04.08.2009, 16:52
оке, спс, попробую. о результатах отпишусь :)

Deidara
01.09.2009, 13:18
Хмм...не отписался, но подсказали правильно)))