Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как вернуть строку из URLLoader (http://www.flasher.ru/forum/showthread.php?t=96300)

7thsky™ 29.05.2007 10:17

Цитата:

Сообщение от vvk80
Спасибо,miramax!
Пока обойдемся без инкапсуляции;) А потом я туда таймер запихну, который будет смотреть, когда переменная заполнится и возвращать ее... Хотя таймер ресурсы жрет дико... я тут решил картинки подвигать по таймеру, так у меня 100% загрузка процессора


В АС3 просто не возможно сделать так чтобы одна функция посылала и возвращала результат, даже не пытайтесь - просто потратите время.

vvk80 14.06.2007 20:08

Решение проблемы теоретически найдено (на тестовом примере вроде работает):
Код:

package HelperClasses
{
    import flash.display.*;
          import flash.text.*;
        import flash.events.*;
        import flash.net.*;
       
        public class LoadText extends URLLoader
        {
                //private variables
                private var _sTarget:String;
                private var resultText:String;
                private var loader:URLLoader;
               
                private var dataWritten:Event;
               
                public function LoadText (target:String):void
                {
                        //constructor
                        this._sTarget = target;
                        textLoader();
                }
               
                private function textLoader():void
                {
                        loader = new URLLoader();
                        var resultText: String = "";
            var request:URLRequest = new URLRequest(target);
            try
                        {
                                loader.load(request);
                        }
                        catch (error:Error)
                        {
                                trace("Unable to load requested document.");
            }
                        loader.addEventListener(Event.COMPLETE, completeHandler);
                        //trace(resultText);
                }
                private function completeHandler(event:Event):void
                {
                        resultText = loader.data;
                        dataWritten = new Event("dataWritten", true);
                        dispatchEvent(dataWritten);
                        //trace("Tracing complate Handler " + resultText);
                        //
                }
                public function get outputText():String
            {
                        return resultText;
              }
                public function getOutPutText():void
                {
                        trace(resultText);
                }
        }
}

ну в основном файле:

Код:

var myText:LoadText = new LoadText("Texts\\sample.txt");
var myVar:String;
myText.addEventListener("dataWritten", onDataReceived);
function onDataReceived(event:Event):void
{
        myVar = myText.outputText;
        trace("!!!!!!!!!" + myVar);
}

конечно, значение переменной будет видно только в рамках функции onDataReceived, но все равно меня это устроит, так как таким образом я могу вынести функциональность загрузки файла в отдельный класс...

Кстати, если я вдруг написал откровенную чушь, прошу поправить... я начинающий, так что буду рад любым комментам :)

silin 14.06.2007 22:47

значение переменной будет видно везде, но только после события dataWritten..
насчет выноса функциональность загрузки файла в отдельный класс и вещания своего события: не очень понятно что это тебе дает..
загрузка и так вынесена в отдельный класс (URLLoader), можно его просто расширить, привязав экземпляр к конкретному урлу в конструкторе:
Код:

package {
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        public class TextLoader extends URLLoader {
               
                function TextLoader(url:String){
                        load(new URLRequest(url));
                }
        }
}

Код:

var myText:TextLoader=new TextLoader("sample.txt");
myText.addEventListener(Event.COMPLETE,onDataReceived);
function onDataReceived(e:Event):void{
        trace("!!!!!!!!!"+ myText.data);
}



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

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