Просмотр полной версии : Проблема при использовании своей написанной библиотеки подключаемой к Flex проекту
Доброй всем сети.
Итак к сути:
Создаю свою библиотеку (swc) там есть пока что ровно один класс.
Класс реализует подгрузку xml файла, через URLLoader, в конструктор передается путь до файла который запихивается в проперти класса.
Далее в проекте подключаю эту библиотеку создаю экземпляр класса передаю в конструктор путь, и... ничего не происходит.
Точнее: написал листнер для события Event.COMPLETE и он его на первый взгляд не обрабатывает(ну так нам говорит геттер из mxml когда я его запускаю), но если внутри моего класса делать Alert.show то он нормально показывает что листнер обрабатывается.
В чём может быть проблема? оО
iflamberg
03.08.2009, 22:06
так не скажешь. Ставьте трейсы через каждый шаг, смотрите, где происходит стоп или запускайте дебаг.
А что происходить-то должно?
он должен возвращать мне 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.
Хотя если вызывать такой алерт прям из листнера, а не проперти присваивать, то выдает он правильно(внутри класса получается), такое ощущение что область видимости бредит.
А по-моему, ошибка здесь:
cfg = new ConfigLoader("data/config.xml");
Alert.show(cfg.message);
xml еще не загрузился, а Вы уже message тянете...
AlexStukoff
04.08.2009, 16:06
Lou +1
ConfigLoader должен диспатчить событие о успешной загрузке данных, на которое вы подпишитесь в основном проекте. И вот в обработчике этого события уже и обращайтесь к cfg.message
оке, спс, попробую. о результатах отпишусь :)
Хмм...не отписался, но подсказали правильно)))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.