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

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

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

Регистрация: Aug 2010
Сообщений: 6
По умолчанию Как правильно применить Event.COMPLETE

Есть главный класс
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.*;
	import MyClass;
	public class Main extends Sprite 
	{
		public var tf: TextField;
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			tf = new TextField();
			textf.text=" ";
                        addChild(textf);
			var temp:MyClass = new MyClass();
			tf.appendText(MyClass.vardata);
		}
 
	}
 
}
MyClass:
Код AS3:
public function Download(){ 
			var request:URLRequest = new URLRequest("http://www.domain.com/data.xml"); 
			var loader:URLLoader = new URLLoader(); 
			loader.addEventListener(Event.COMPLETE, completeHandler); 
			try{ 
				loader.load(request); 
			} 
			catch (error:Error){ 
				trace("Error"); 
			}
		}
 
		private function completeHandler(event:Event):void{ 
			 var dataXML:XML = XML(event.target.data); 
			 vardata = dataXML.toXMLString(); 
		}
При обработке этого кода переменная vardata получается пустой, т.к. не успевает получить значение. Что надо сделать, что б vardata получила значение?

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

Регистрация: Dec 2006
Адрес: Novosibirsk
Сообщений: 93
MyClass extends EventDispatcher:

Код AS3:
private function completeHandler(event:Event):void{ 
			 var dataXML:XML = XML(event.target.data); 
			 vardata = dataXML.toXMLString(); 
                         dispatchEvent(new Event(Event.COMPLETE));
		}
Главный класс:
Код AS3:
private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			tf = new TextField();
			textf.text=" ";
                        addChild(textf);
			var temp:MyClass = new MyClass();
                        temp.addEventListener(Event.COMPLETE, completeHandler);
 
		}
		private function completeHandler(e:Event):void
		{
                        tf.appendText((e.target as MyClass).vardata);
		}


Последний раз редактировалось bebop; 24.08.2010 в 17:13.
Старый 24.08.2010, 17:14
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 3  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Избегайте использования замыканий.
Код AS3:
temp.addEventListener(Event.COMPLETE, onComplete);
private function onComplete(e:Event):void{
tf1.appendText((e.currentTarget as MyClass).vardata);
}

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

Регистрация: Dec 2006
Адрес: Novosibirsk
Сообщений: 93
фуф, я исправился раньше чем меня исправили

Старый 24.08.2010, 17:23
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 5  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
У меня код правильнее =)
Если MyClass по каким-то причинам станет DisplayObject`ом и его ребёнок отправит событие Event.COMPLETE с бабблингом - то твой код даст RTE, если ребёнок не MyClass =)

P.S. знаю, что проблема высосана из пальца =)

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

Регистрация: Dec 2006
Адрес: Novosibirsk
Сообщений: 93
Еще бы сделать проверку, вдруг переменная уже сразу есть после инстанцирования.

P.S. Работать то все равно не охота

Старый 24.08.2010, 17:26
a6279019 вне форума Посмотреть профиль Отправить личное сообщение для a6279019 Найти все сообщения от a6279019
  № 7  
Ответить с цитированием
a6279019

Регистрация: Aug 2010
Сообщений: 6
Спасибо)

Старый 24.08.2010, 17:30
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Ну, ответ от сервера синхронно никак не придёт, поэтому проверка совсем лишняя. Или ты не о том?

P.S. В точку, вообще не хочется...

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

Регистрация: Dec 2006
Адрес: Novosibirsk
Сообщений: 93
Тем же волшебным образом, каким объект превратится в ДисплейОбжекта, он может спрашивать данные и не у сервера

Старый 24.08.2010, 17:41
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 10  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
А, ты имеешь ввиду сделать медиатор чтобы можно было тестировать как с локальными данными, так и с серверными просто меняя флаг?
Я по setTimeout делаю, иммитирую ассинхроность загрузки =)

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

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

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


 


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


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