Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Проблема при использовании своей написанной библиотеки подключаемой к Flex проекту (http://www.flasher.ru/forum/showthread.php?t=128271)

chidori 03.08.2009 21:55

Проблема при использовании своей написанной библиотеки подключаемой к Flex проекту
 
Доброй всем сети.
Итак к сути:
Создаю свою библиотеку (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>

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

/**
 * @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

А по-моему, ошибка здесь:
Код AS3:

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

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


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

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