Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   HTTPStatusEvent (http://www.flasher.ru/forum/showthread.php?t=213136)

djken 11.07.2016 12:24

HTTPStatusEvent
 
Всем привет.
В классе есть методы, которые грузят json, картинки.. Еще будет загрузка и видео...
Мне необходимо отлавливать HTTPStatus при загрузке каждого.
Как лучше написать один общий HTTPStatus для всех?
Например для экземпляра класса Loader я использую свойство name, по которому потом могу определить, что данный loader загружал. Но для URLLoader такое свойство использовать нельзя.

Для наглядности:
Код AS3:

private function loadJson():void
{
        var loader:URLLoader = new URLLoader;
        loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatusHandler);
        loader.load(new URLRequest('http://...'));
}
 
private function loadAvatar():void
{
        var loader = new Loader();
        loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatusHandler);
        loader.name = 'loaderAvatar';
        loader.load(new URLRequest('http://...'));
}
 
private function loadImage():void
{
        var loader = new Loader();
        loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatusHandler);
        loader.name = 'loaderImage';
        loader.load(new URLRequest('http://...'));
}
 
private function onHttpStatusHandler(e:HTTPStatusEvent):void
{
        if (int(e.status) == 0)
        {
                switch (e.currentTarget.loader.name)
                {
                        case 'loaderImage':
                                break;
 
                        case 'loaderAvatar':
                                break;
                }       
                e.currentTarget.removeEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatusHandler);
        }
}


in4core 11.07.2016 13:22

djken серьезно ?

Код AS3:

if(e.currentTarget is URLLoader)


djken 11.07.2016 16:30

in4core, немного не то )

А если у меня несколько методов, в каждом из которых URLLoader грузит разного рода информацию?
Как в обработчике определить после кого именно он сработал? Можно было бы конечно передавать какой-нибудь свой параметр c addEventListener, но как я знаю, там нет такой возможности...
Вот для этого я и использую в Loader свойство name, чтобы потом идентифицировать. В URLLoader такого свойства нет ( не уверен, но может быть, потому что он не является наследником DisplayObject... )

Tails 11.07.2016 16:43

Цитата:

Сообщение от djken (Сообщение 1195402)
...может быть, потому что он не является наследником DisplayObject...

Верно.

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

Вообще, этих загрузчиков, менеджеров ресурсов и т.п. уже создано великое множество. Гуглим по запросу: AssetManager AS3.

elder_Nosferatu 12.07.2016 12:25

@djken

Можете использовать Dictionary. Перед загрузкой суете ему загрузчик в качестве ключа, а идентификатор в качестве значения:
Код AS3:

myDict[myLoaderInst] = "loader_inst_idetifier";

А в обработчике получаете нужный идентификатор:
Код AS3:

var id:String = myDict[event.target];

Ну и по окончанию загрузки не забудьте удалить загрузчик из словаря, чтобы мусор не накапливался:
Код AS3:

delete myDict[event.target];


caseyryan 12.07.2016 20:31

Самый простой и надежный способ - просто написать свой загрузчик, унаследованный от URLLoader, и добавить ему все необходимые свойства, например name, если это решает проблему
Код AS3:

package {
 
    import flash.net.URLLoader;
 
    public class CustomLoader extends URLLoader {
 
        public var name:String = null;
 
        public function CustomLoader() {}
    }
}


djken 13.07.2016 22:35

caseyryan, спасибо, так и хотел сделать.
Думал, что есть какой-то способ, о котором не знаю )


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

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