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

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

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

Регистрация: Aug 2009
Сообщений: 5
По умолчанию О классах и методах и немного про URLLoader

Доброго времени суток.
Совсем уже отчаялся и решил-таки спросить.

Задача сводится к стандартной загрузке XML документа.
Итак дано:

есть два класса loadData и createObj

loadData - клас осуществляющий загрузку XML. Код привожу в кратце:

Код AS3:
var loadXMLdata:XML;
var loader:URLLoader = new URLLoader(new URLRequest("xml.xml"));
loader.addEventListener(Event.COMPLETE, getDataXML);
function getDataXML(e:Event):void
        {
		loadXMLdata = XML(e.target.data);
	}
второй класс createObj имеет лишь одну цель, а именно получить вот эту самую loadXMLdata из loadData и на этих данных уже сформировать экземпляр в конструкторе.

в принципе с задачей в плане кода я справился как мне кажется, но наткнулся на проблему которая уже имела место быть на форуме, но ответа я так и не нашел.
А именно - когда я обращаюсь как угодно к loadData толи через создание экземпляра, толи через прямое обращение к функции - я просто не успеваю загрузить данные в переменную.Ну и формирование экземпляра createObj соответсвенно летит в тар-тарары.
Как притормозить выполнение кода я так и не придумал.

Так вот в чем вопрос. Такой вариант реализации вообще имеет право на существование? Если нет то какие есть варианты? Для меня критично именно продолжение кода уже с загруженными данными. Затормозить ожиданием функции тоже нельзя, т.к. конструктор свои дела закрывает и все значения у меня null.

Ну всем кто уделит мне пару строк за ранее спасибо

Старый 03.09.2009, 19:01
evg1605 вне форума Посмотреть профиль Отправить личное сообщение для evg1605 Найти все сообщения от evg1605
  № 2  
Ответить с цитированием
evg1605

Регистрация: Sep 2009
Сообщений: 17
Я правильно понял что loadData ты используешь следующим образом
Код AS3:
var ld:loadData = new loadData();
//и сразу же второй строчкой
createObj.use(ld);
Если так , то ты разумеется не дожидаешься загрузки.
createObj должен юзать loadData, только когда она ему просигналит
(т.е. подписавшись на событие), а событие должно генерироваться loadData сразу после строчки loadXMLdata = XML(e.target.data);
Если не правильно понял - напиши подробнее код.
__________________
http://www.***********

Старый 03.09.2009, 19:07
amesqit вне форума Посмотреть профиль Отправить личное сообщение для amesqit Найти все сообщения от amesqit
  № 3  
Ответить с цитированием
amesqit
 
Аватар для amesqit

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
А что мешает после получения в классе loadData сгенерировать событие, подписаться на него там где это необходимо и после вызова события сгенерированного в loadData создать экзепляр createObj на основе данных в loadXMLdata? Все что для этого надо почитать в хелпе про класс EventDispatcher и его метод dispatchEvent()

Старый 03.09.2009, 19:10
evg1605 вне форума Посмотреть профиль Отправить личное сообщение для evg1605 Найти все сообщения от evg1605
  № 4  
Ответить с цитированием
evg1605

Регистрация: Sep 2009
Сообщений: 17
Ну так я за то и агитирую
__________________
http://www.***********

Старый 03.09.2009, 19:14
Idon вне форума Посмотреть профиль Отправить личное сообщение для Idon Найти все сообщения от Idon
  № 5  
Ответить с цитированием
Idon

Регистрация: Sep 2009
Сообщений: 65
1)
Код AS3:
function getDataXML(e:Event):void
        {
		loadXMLdata = XML(e.target.data);
 
               //а вот тут нельзя создать экземпляр createObj?
 
	}
2)
Можно прямо в createObj загружать xml, но технология там будет такая же: "событие окончания загрузки->всё остальное".

3) Можно перед вызовом конструктора createObj проверять, завершилась ли загрузка, и если нет не создавать createObj (если его создание не критично или пользователь может самостоятельно генерировать попытки его создания. например по нажатию на кнопку).

4) не уверен, что получится, но можно попробовать написать супер-корявый код:
сделать бесконечный цикл, выходом из которого будет событие окончания загрузки.
(допустим, в цикле можно проверять переменную, которая после окончания загрузки меняется на то значение, которое удовлетворяет выходу из бесконечного цикла). Но даже если это и заработает, тут есть подводные камни: защита флеша от зацикливания (по-умолчанию, там вроде 15 сек дается), ситуация, когда загрузка не происходит. Плюс ко всему, я бы постеснялся писать такое))


Последний раз редактировалось iNils; 03.09.2009 в 19:34.
Старый 03.09.2009, 19:20
amesqit вне форума Посмотреть профиль Отправить личное сообщение для amesqit Найти все сообщения от amesqit
  № 6  
Ответить с цитированием
amesqit
 
Аватар для amesqit

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
Idon, особо нет смысла мешать в кучу загрузку и обработку данных, бесконечный цикл, нажатие на кнопку не выход, это глупо, если будет долго загружаться, то юзер замучается жать кнопку, а цикл будет ограничиваться 15 секундами, да и зачем изобретать велосипед, когда элементарно можно воспользоваться пользовательскими событиями, они для того и предназначены
P.S.: в варианте 4 загрузка xml не произойдет никогда, т.к. до завершения цикла другой код выполняться не будет, в том числе и обработка загрузки xml


Последний раз редактировалось amesqit; 03.09.2009 в 19:22.
Старый 03.09.2009, 19:21
evg1605 вне форума Посмотреть профиль Отправить личное сообщение для evg1605 Найти все сообщения от evg1605
  № 7  
Ответить с цитированием
evg1605

Регистрация: Sep 2009
Сообщений: 17
4) не сработает, даже если не постесняешься, инициализация loadXMLdata будет происходить в том же потоке который ты циклишь
__________________
http://www.***********

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
а вы перед XML не пробовали поставить new?

Старый 03.09.2009, 19:37
amesqit вне форума Посмотреть профиль Отправить личное сообщение для amesqit Найти все сообщения от amesqit
  № 9  
Ответить с цитированием
amesqit
 
Аватар для amesqit

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
Цитата:
Сообщение от СлаваRa Посмотреть сообщение
а вы перед XML не пробовали поставить new?
тут идет преобразование типов, можете сами попробовать:

Код AS3:
var xml:XML = XML("<a><b><c/></b></a>")
trace(xml)
или
Код AS3:
var xml:XML =XML(<a><b><c/></b></a>)
trace(xml)

Старый 03.09.2009, 19:42
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 10  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
покажи весь код класса

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

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

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


 


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


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