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

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

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

Регистрация: Aug 2007
Сообщений: 20
По умолчанию Синхронный load XML

Код:
class Class1
{
	function selectedChannels():Array
	{

		var flooring:XML = new XML();
 
		flooring.onLoad = function(success)
		{
			// обработка массива "a"
		     return(a);	
		}
		
		flooring.load("bla.xml");	
	}
}

Код:
import Class1;

var a:Class1 = new Class1();
var b:Array = new Array();

b = a.selectedChannels();

Мне _etc уже успел объяснить что ActionScript работает асинхронно. Я понимаю почему вышеприведённый код не работает, но я не знаю как эту задачу в итоге реализовать.


Желательно конечно изменить класс, а не основной код.

Старый 31.08.2007, 22:31
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Надо изменить свой собственный подход к решению задачи, а не идти по заранее гиблому пути.
В приведенном варианте задача решения не имеет, такое невозможно во Flash.

Старый 31.08.2007, 23:31
milDude вне форума Посмотреть профиль Отправить личное сообщение для milDude Найти все сообщения от milDude
  № 3  
Ответить с цитированием
milDude

Регистрация: Aug 2007
Сообщений: 20
Цитата:
Сообщение от __etc
Надо изменить свой собственный подход к решению задачи, а не идти по заранее гиблому пути.
В приведенном варианте задача решения не имеет, такое невозможно во Flash.
Каким тогда путём идти? Желательно чтобы код оставался ясным.

Старый 31.08.2007, 22:34
Eric Gurt вне форума Посмотреть профиль Отправить личное сообщение для Eric Gurt Посетить домашнюю страницу Eric Gurt Найти все сообщения от Eric Gurt
  № 4  
Ответить с цитированием
Eric Gurt
 
Аватар для Eric Gurt

Регистрация: Oct 2006
Адрес: https://twitter.com/Eric_Gurt
Сообщений: 393
я пробывал грузить сразу 10 хмл в чате, и в результате получались странные коллизии - чиался один файл, а возвращалось содержимое другого.
Я решил эту проблему, запрашивая рнр файл, который склеивал несколько хмл-ек и возвращал результат.
__________________
x << 2;

Старый 31.08.2007, 23:35
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Отказаться от синхронности.
Выполнять действия по событиям.

Старый 01.09.2007, 00:47
milDude вне форума Посмотреть профиль Отправить личное сообщение для milDude Найти все сообщения от milDude
  № 6  
Ответить с цитированием
milDude

Регистрация: Aug 2007
Сообщений: 20
Получается, что классы для загрузки данных сделать не получится?

Старый 01.09.2007, 00:50
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Получится. Используя все ту же событийную модель.

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

Регистрация: Aug 2007
Сообщений: 20
Цитата:
Сообщение от __etc
Получится. Используя все ту же событийную модель.
Не можете привести коротенький пример. Никак не укладывается как это можно сделать. То есть я понимаю, что такое события, делегаты там итырым ... но как это можно инкапсулировать в класс?

Цитата:
Сообщение от Eric Gurt
я не пойму, в чем заключается необходимость синхронной загрузки хмл?
А как я буду работать с данными, которые ещё не пришли? Ну понятно, что через onLoad. Только ведь некрасиво у меня получается. Может у кого получается красиво.


Последний раз редактировалось etc; 01.09.2007 в 12:57.
Старый 01.09.2007, 02:03
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 9  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
Цитата:
Сообщение от milDude
... но как это можно инкапсулировать в класс?
Подойдет?
Код:
import mx.events.EventDispatcher;
import mx.utils.Delegate;

class ChannelsDAO
{
	private var _xml:XML;
	
	public var addEventListener:Function;
	public var removeEventListener:Function;
	
	private var dispatchEvent:Function;
	
	public function ChannelsDAO()
	{
		EventDispatcher.initialize(this);
	}
	
	public function getChannels():Void 
	{
		this._xml = new XML();
		this._xml.ignoreWhite = true;
		this._xml.onLoad = Delegate.create(this, this.onLoad);
		this._xml.load("channels.xml");
	}
	
	private function onLoad(success:Boolean)
	{
		if(success)
		{
			var result:Array = this.getChannelsFromXML();
			//вещаем событие.
			//result - полученных данные.
			this.dispatchEvent({type:"onResult", result: result})
		}else
		{
			this.dispatchEvent({type:"onFault"})
		}
	}
	
	private function getChannelsFromXML():Array 
	{
		var channels:Array = []
		
		//здесь извлекаем данные из загруженного xml-документа.

		return channels;
	}
}
Проверка
Код:
import mx.utils.Delegate;

class ChannelsDAOTest
{
	private var _model:Model;
	private var _dao:ChannelsDAO;
	
	public function ChannelsDAOTest()
	{
		
	}
	
	public function run():Void 
	{
		this._model = new Model();
		this._dao = new ChannelsDAO();
		
		this._dao.getChannels();
		this._dao.addEventListener("onResult", Delegate.create(this, this.resultHandler));
	}
	
	private function resultHandler(event:Object):Void 
	{
		this._model.channels = event.result;
	}
}

Старый 01.09.2007, 00:56
Eric Gurt вне форума Посмотреть профиль Отправить личное сообщение для Eric Gurt Посетить домашнюю страницу Eric Gurt Найти все сообщения от Eric Gurt
  № 10  
Ответить с цитированием
Eric Gurt
 
Аватар для Eric Gurt

Регистрация: Oct 2006
Адрес: https://twitter.com/Eric_Gurt
Сообщений: 393
я не пойму, в чем заключается необходимость синхронной загрузки хмл?
__________________
x << 2;

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

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

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


 


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


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