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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.04.2012, 22:30
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 1  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
По умолчанию XML и отлов cобытия конца загрузки

Доброе время суток!

Прошу помочь мне в разборе XML парсинга.
и так есть класс LoadConfig
Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	/**
	 * ...
	 * @author 1
	 */
	public class LoadConfig extends Sprite
	{
		public var xml :XML;
		public var loader : URLLoader;
		public var fileName :String = "../config.xml";
 
		public function LoadConfig() 
		{
 
			loader = new URLLoader();
			var request : URLRequest = new URLRequest(fileName);
			loader.addEventListener(Event.COMPLETE, configLoadComplete);
			loader.load(request);
		}
 
		public function configLoadComplete(e:Event):void
		{
 
			xml = XML(loader.data); 
			trace(xml);
 
 
		}
 
		public function TraceXML():void
		{
			trace(xml);
		}
	}
 
}
В Main'e создается экземпляр этого класса
Код AS3:
var config :LoadConfig = new LoadConfig();
// и пытаюсь сразу получить данные из xml
config.TraceXML();
После запуска флешки в консоли пишется "null" и второй трейс моя xml'лька
т.е.
Код:
null
<list>
  <params>
    <param>width</param>
    <value>800</value>
  </params>
</list>
можете объяснить почему метод TraceXML выдает null? если даже вместо config.TraceXML() набрать, например trace(config.xml.params.value); выдает null....

Старый 25.04.2012, 23:00
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Потому что еще ничего не загрузилось, это же очевидно.
На загрузку надо время, не то что в интернете, а даже в локальной системе загрузка происходит не мгновенно.
__________________
Reality.getBounds(this);

Старый 26.04.2012, 09:02
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 3  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
Какой выход? Если сделать так:
Код AS3:
loader.addEventListener(Event.COMPLETE, configLoadComplete);
обработать это событие в функиции configLoadComplete добавить
Код AS3:
dispathEvent(new Event("CONFIG_LOADED"));
а в родителе отловить это событие? Есть какие варианты? как будет более грамотно?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. Естественно, только по событию можно определить, что загрузка произошла и с данными можно работать.
2. Более грамотно будет не заниматься ерундой и не писать класс, который только делегирует обращения к URLLoader'у. То есть, у Вас эта идея возникла скорее всего вместе с уверенностью, что Ваш класс будет возвращать данные, не загрузив их. Но этого не будет. Посмотрите на свой класс и скажите, чем он отличается от самого URLLoader, кроме того что не предоставляет всей его функциональности?
Практически каждый флэшер хотя бы раз в жизни пытался написать свой XMLLoader. И я не исключение. Но смысл в этом появляется, только если Ваш класс будет делать что-то еще, то чего не делает URLLoader. Грузить коллекцию XMLек. Осуществлять перевод с WIN-1251. Создавать какой-то специфический Объект (по сути это уже не лоадер а парсер).
Что можно сделать по-другому? Ну например, можно использовать не События а коллбек, то есть отдавать вашему XMLLoaderу ссылку на функцию, которую надо вызвать по окончании загрузки (хорошо бы так же давать ссылку на функцию, которую надо вызвать, если загрузка завершилась ошибкой).
Но надо помнить, что коллбеки не очень кошерны в AS3, так как не дают возможности строгой типизации.
__________________
Reality.getBounds(this);

Старый 26.04.2012, 10:40
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 5  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
Ну вообще я пытался написать класс, который грузит настройки и будет возвращать нужны данные в любом месте где это потребуется....

опять копаю не туда?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
))))
В смысле Вы сначала рожаете полста детишек, а потом при случае они звонят папе и спрашивают "Папа! А я негр или китаец? А сколько мне лет? А какого цвета на мне рубашка? А почему..?"
Семью надо планировать. Заранее. А потом в соответствии с планом заводить детишек.
Загрузили настройки и насоздавали объектов по этим настройкам. А не наоборот.
__________________
Reality.getBounds(this);

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

Регистрация: May 2010
Адрес: Киев, Украина
Сообщений: 140
Записей в блоге: 2
В самом "лоадере"
Код AS3:
public function configLoadComplete(e:Event):void
	{
 
		xml = XML(loader.data); 
		trace(xml);
 		dispatchEvent(new Event("complete"));	// Пускаем событие что загрузка завершена
	}
В Main'e создается экземпляр этого класса

Код AS3:
var config :LoadConfig = new LoadConfig();
 
// Слушаем событие , как только получим, выполнится функция xml_complite
config.addEventListener("complete", xml_complete) ; 
 
 
function xml_complete(e:Event):void
{
	config.TraceXML();
}
PS. Есть решения и получше, но желаю вам к ним дойти самостоятельно.
PS2. Привяжите main fla класс к файлу main.as и не пишите в кадрах

Старый 27.04.2012, 11:03
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 8  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
Код:
PS2. Привяжите main fla класс к файлу main.as и не пишите в кадрах
а вот сдесь можете по-подробнее?

Старый 27.04.2012, 14:32
Newred вне форума Посмотреть профиль Отправить личное сообщение для Newred Посетить домашнюю страницу Newred Найти все сообщения от Newred
  № 9  
Ответить с цитированием
Newred
 
Аватар для Newred

Регистрация: May 2010
Адрес: Киев, Украина
Сообщений: 140
Записей в блоге: 2
Цитата:
Сообщение от Wazzabi Посмотреть сообщение
а вот сдесь можете по-подробнее?
Можно и даже нужно )
На ютубе видео как подключал
Во вложении пример.
Вложения
Тип файла: rar test.rar (6.3 Кб, 11 просмотров)

Старый 28.04.2012, 18:33
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 10  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
Newred, спасибо за урок. и сразу возникают несколько вопросов...

в чем плюсы этого способа?
Компиль где нажимать надо на FlashCS5? или в билдере?
Как тоже самое сделать на FlashDevelop'е?
Извиняюсь, что оффтоп вопросы

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

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

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


 


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


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