Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Можно ли на AS3 написать функцию которая возврашала бы содержимое файла? (http://www.flasher.ru/forum/showthread.php?t=81167)

redbaron 13.06.2006 19:11

Можно ли на AS3 написать функцию которая возврашала бы содержимое файла?
 
Я возможно по не знанию попал в замкнутый круг.

Значит так я хочу написать класс который бы возврарашал содержимое файла.

например так:

FLoader.GetXmlFile(filename:string):XML;

но я никак не пойму как мне это сделать.
Дело втом что в AS3 насколько я знаю, загрузку можно сделать только через класс подобыный URLLoader.

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


далее кусок псевдо кода
Код:

public class DataLoader extends Sprite {
       
        var uploaded:Boolean=false;
       
        public function load(filename:String):String{
                var loader:URLLoader = new URLLoader();
            configureListeners(loader);
                var request:URLRequest = new URLRequest(filename);
            loader.load(request);
            uploaded=false;
            while(uploaded==false){ doNothing()};            return loader.data.toString();
        }
       
        public function doNothing(){
                // ни чего не делаем но главный цикл программы должен 
            //продолжаться
        }
       

        private function configureListeners(dispatcher:IEventDispatcher):void {
            dispatcher.addEventListener(Event.COMPLETE, completeHandler);
           
        }

        private function completeHandler(event:Event):void {
            uploaded=true;
         
        }

}

смысл я думаю понятен.
мы ждем пока файл не загрузится, а потом возвращаем результат.

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

я бы уже сделал на делегатах, т.е. передавал классу загрузчику файла,
объект и функцию, которую хочу вызвать при окончании загрзузки, так нет, делегаты упразднили(

вообщем помогите. Возможно есть возможность не прерывать основной цикл программы?

главное требование, получить содержимое файла сделав запрос к методу класса.

Nirth 14.06.2006 00:05

Автору тему предупреждение, за не использование тэгов [сode][/сode]

etc 14.06.2006 00:25

А зачем запускать цикл, когда можно просто выловить событие?

Nirth 14.06.2006 00:27

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

redbaron 14.06.2006 14:02

Цитата:

Сообщение от Nirth
Вообще это называется асинхроность, функция загружающая файл, не может загрузить его за доли секунды.
поэтому нет.

вообщето такой ответ называется умствованием.
извини.
но вопроса ты не понял.
никто не просит загружать файл за доли секунды.

глобально задача выглядит так.

классу рисовальщику нужны данные
он их запрашивает у класса универсального поставщика данных, передав ему url.
поставищик блокирует интерфейс, выводит транспорант "ждите идет загрузка"
поставщик загружает данные
по окончании загрузки поставщик передает данные рисовальщику.

проблема как раз в "передает данные рисовальщику"

пока не получаеться написать в
рисовальщике примерно так

Код:

data=Provider.getData("someurl.xml");
это как раз и описывалось в вопросе.

пока похоже можно только сделать на интерфейсах
и передавать поставщику ссылку на рисовальщика

зы. спасибо за предупреждение, буду исправлятся

etc 14.06.2006 14:18

Ну пусть твой поставщик будет вещателем. Ты говоришь ему, мол, загрузи данные и одновременно с этим подписываешься на события поставщика. Когда поставщик загрузит данные, он начнёт орать всем подписчикам, что данные загрузились и передаёт их в качестве параметра в событии. В этот момент твой рисовальщик получает эти данные (он же подписан на это событие), убирает транспорант и рисует (или что у тебя там...)

з.Ы. Всегда бы так объясняли свой вопрос и суть. Жаль, что сразу не смог объяснить.

7thsky™ 14.06.2006 15:21

Цитата:

Сообщение от redbaron
вообщето такой ответ называется умствованием.
извини.
но вопроса ты не понял.
никто не просит загружать файл за доли секунды.

Это ты не понял ответа. Все общение плеера с окружением ассинхронное. и то что ты предлогаешь - физически во флэше не возможно сделать.


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

redbaron 14.06.2006 16:16

2:__etc спасибо так наверно и сделаю.


3:7thsky™ на всякого мудреца довольно простоты:)
вот твой ответ понятен. а Nirth нет, тем более в контесте "функция загружающая файл, не может загрузить его за доли секунды".

Nirth 14.06.2006 16:52

вообщето такой ответ называется умствованием.
Нет это называется ленью, и слепой надеждой, что тебя всетаки поймут ;)

Вообще у Sho Kuwamoto в блоге есть три отличные статьи по работе с асинхронными вызовами / RPC
Dealing with asynchronous events, part 1
Dealing with asynchronous events, part 2
Dealing with asynchronous events, part 3

Usnul 14.06.2006 17:08

извините за офтоп
" 7thsky™
NIRTH'S FUN"
- ну уж очень забавно =)


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

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