Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.07.2016, 12:24
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 1  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
Question 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);
	}
}
__________________
кто не отвечает, того garbage collector забирает

Старый 11.07.2016, 13:22
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
djken серьезно ?

Код AS3:
if(e.currentTarget is URLLoader)
__________________
Марк Tween

Старый 11.07.2016, 16:30
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 3  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
in4core, немного не то )

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

Старый 11.07.2016, 16:43
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 4  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Цитата:
Сообщение от djken Посмотреть сообщение
...может быть, потому что он не является наследником DisplayObject...
Верно.

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

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

Старый 12.07.2016, 12:25
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 5  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
@djken

Можете использовать Dictionary. Перед загрузкой суете ему загрузчик в качестве ключа, а идентификатор в качестве значения:
Код AS3:
myDict[myLoaderInst] = "loader_inst_idetifier";
А в обработчике получаете нужный идентификатор:
Код AS3:
var id:String = myDict[event.target];
Ну и по окончанию загрузки не забудьте удалить загрузчик из словаря, чтобы мусор не накапливался:
Код AS3:
delete myDict[event.target];

Старый 12.07.2016, 20:31
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Самый простой и надежный способ - просто написать свой загрузчик, унаследованный от URLLoader, и добавить ему все необходимые свойства, например name, если это решает проблему
Код AS3:
package {
 
    import flash.net.URLLoader;
 
    public class CustomLoader extends URLLoader {
 
        public var name:String = null;
 
        public function CustomLoader() {}
    }
}
__________________
Ко мне можно и нужно обращаться на ты)

Старый 13.07.2016, 22:35
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 7  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
caseyryan, спасибо, так и хотел сделать.
Думал, что есть какой-то способ, о котором не знаю )
__________________
кто не отвечает, того garbage collector забирает

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
HTTPStatusEvent , HTTP_STATUS
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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