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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.09.2007, 01:54
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 11  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Цитата:
Сообщение от milDude
А как я буду работать с данными, которые ещё не пришли?
Ну допустим у вас есть функция, которая обращается к данным. Если данные есть, она делает что-то. Если нет, она грузит, дает задание запустить себя с этими же параметрами по onLoad и прекращает работу. Это только как вариант.

Старый 01.09.2007, 02:03
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 12  
Ответить с цитированием
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, 10:07
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 13  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
В классе:
Код:
import mx.events.EventDispatcher;
//
class SubClass extends XML {
	/*
	*/
	private var dispatchEvent:Function;
	public var addEventListener:Function;
	public var removeEventListener:Function;
	/*
	*/
	public function SubClass() {
		super();
		this.ignoreWhite = true;
		EventDispatcher.initialize(this);
	}
	/*
	*/
	public function onLoad(success:Boolean):Void {
		if (success) {
			var eventObject:Object = {type:"onEvent", target:this};
			dispatchEvent(eventObject);
		}
	}
}
В кадре:
Код:
var subClass:SubClass = new SubClass();
//
var listener:Object = new Object();
listener.onEvent = function(eventObj:Object) {
	trace(eventObj.type)
};
subClass.addEventListener("onEvent", listener);
//
subClass.load("my_xml.xml");


Последний раз редактировалось udaaff; 01.09.2007 в 10:09.
Старый 01.09.2007, 10:07
milDude вне форума Посмотреть профиль Отправить личное сообщение для milDude Найти все сообщения от milDude
  № 14  
Ответить с цитированием
milDude

Регистрация: Aug 2007
Сообщений: 20
lowka
Спасибо за код!

Понял, что просто в голове не могу привыкнуть к асинхронности. Ну вроде уже привык )).

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

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

lowka, зря ты туда ещё и модель запихнул. Щас вопросов миллион будет. Рано ещё.

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

Регистрация: Aug 2007
Сообщений: 20
Код:
this._xml.onLoad = Delegate.create(this, this.onLoad);
почему не работает вот так:
Код:
this._xml.onLoad = this.onLoad;

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

Регистрация: Sep 2002
Сообщений: 30,787
Это связано с изменением области видимости при такой записи. Delegate исправляет эту проблему.

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

Регистрация: Aug 2007
Сообщений: 20
а в какой области видимости мы находимся?
this куда ссылается?

насчёт модели угадал ) где можно про неё почитать?

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

Регистрация: Sep 2002
Сообщений: 30,787
this ссылается на XML, а не на класс.

Модель lowka воткнул, как заготовку для реализации паттерна MVC. А оно в данном случае вообще не нужно и лишнее.

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

Регистрация: Aug 2007
Сообщений: 20
Код:
this._xml.onLoad = Delegate.create(this, this.onLoad);
не понял:
слева от знака равенства "this" ссылается на экземпляр класса, правильно?
а справа уже нет?

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

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

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


 


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


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