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

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

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

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Цитата:
наверняка должен быть какой-нибудь красивый "костыль"
Найдете - отпишитесь.

Старый 28.03.2010, 00:33
steelcut вне форума Посмотреть профиль Отправить личное сообщение для steelcut Найти все сообщения от steelcut
  № 12  
Ответить с цитированием
steelcut

Регистрация: Mar 2010
Сообщений: 5
Но все-таки согласитесь, вы не можете getSomeStringFromXml("blabla"); прежде, чем вы загрузите сам xml? А грузится он может секунду, а может 20 секунд, интернет у всех разный.

Вот и получается что жарить рыбу вы можете начать только получив ее в руки.

Насчет использования того же класса, отделите мух от котлет:
customFunction - это ваш getMedia()
Код AS3:
package 
{
	import flash.net.URLRequest;
	import flash.net.*;
	import flash.events.Event;
 
	public class MyLoader
	{
		private var Loader:URLLoader;
		private var customFunction:Function;
 
		public function MyLoader(fileName:String, _customFunction:Function):void
		{
			customFunction = _customFunction;
			xmlLoader = new URLLoader();
			xmlLoader.addEventListener(Event.COMPLETE, customFunction, false, 0, true);
			xmlLoader.load(new URLRequest(fileName));
		}
 
		private function onComplete(e:Event) {
			xmlLoader.removeEventListener(Event.COMPLETE, customFunction);
			customFunction(e);
		}
 
	}
}
То есть где вам надо используйте на здоровье:

Код AS3:
//какой-то ваш класс
var L:myLoader = new MyLoader (fileName, getMedia);
...
public function getMedia(e:Event){
myXML = new XML(e.target.data);
}

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Хм. Пока кадр не загрузится, он не может быть показан; при этом следующий кадр, может быть в сто раз легче предыдущего, показан не будет также. Именно это я и имел в виду, говоря, что Вы мыслите кадрами. Потому что именно так Вы и мыслите - один кубик, ПОТОМ второй, ПОТОМ третий. Но в программе, в отличие от мультика, цепочка другая. Потому что программе нужна ГИБКОСТЬ. Программа состоит из модулей, которые отнюдь не выполняются один за другим, как кадры в мультике. Эти модули включаются как реакция на события, потому что всякая (ну 90%) программа работает с событиями - акциями юзера или событиями, возникающими при получении и обработке данных. Время возникновения этих событий заранее не известно, как и их последовательность (в случае с действиями юзера). Это - асинхронность. Программа не может встать и умереть, пока Вы не нажмете ОДНУ определенную кнопку (аналогия с Вашимм представлением, как должны загружаться данные). Ваше желание запихать всю функциональность класса в конструктор - бессмысленно и противоречит всякой логике класса как объекта, обладающего методами и свойствами.
Еще раз - программа не останавливается и не ждет, пока что-то загрузится, чтобы начать выполнять СЛЕДУЮЩУЮ строчку кода. Это не кадры. Это - гибкость.
__________________
Reality.getBounds(this);

Старый 28.03.2010, 06:38
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 14  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
из xmlLoadHandler пошлите событие о том что данные загружены, например так
Код AS3:
private function xmlLoadHandler(e:Event):void
{
        dispatchEvent(e); // просто пропихиваете событие дальше
        trace(0);
}
в классе, который вызывает loadXml(pathToXML:String) подписываетесь на это событие и в обработчике уже хоть 1000 методов вызывайте по типу getMedia()
__________________
trace("Остановите Землю, я сойду!!!");

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

Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
Цитата:
участки кода отличаются негибкостью и "костылизмом"
Если честно, то мне не понятно, почему вы называете «костылём» слушателя окончания загрузки файла. Как вам уже выше правильно написали, мы не можем обратиться к загруженному XML до его полной загрузки. Это логично, это правильно и это не костыль.

Цитата:
мне нужен класс который получает xml, обрабатывает, и отдает результат
А что вам мешает создать такой класс? =) И если вам нужен полиформизм, то создайте класс, и функцию, допустим initAfterLoadingXML, которая будет вызываться после окончания загрузки XML, и в котором будут происходить все необходимые действия с загруженным XML. А в дочерних классах необходимо будет просто перезаписать функцию initAfterLoadingXML и реализовать «инициализацию» для конкретного дочернего класса.

Старый 01.04.2010, 13:45
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 16  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
Как вариант, можно по событию загрузки xml вешать в классе флаг.
Пока флаг false, вызовы всех методов, связанных с xml (который еще недогружен), пусть кидают эксепшены.

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

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

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


 


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


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