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

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

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

Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
По умолчанию Как изменить параметр класса в обработчике событий

Здравствуйте, помогите, не могу сам разобраться, да и весь интернет облазил. Вот, например, есть такой код. Как сделать, чтобы значение переменной v , установленное в обработчике dataLoaderCompleteHandler было, например, передано в ф-цию myFunction? Сейчас trace(v) там выдает null


Код AS3:
public class LearningR4 {
		internal var v:String;
 
		public function LearningR4() {
 
		}
		public function myFunction(m_fPath, m_dataFile):void {
			var myRequest:URLRequest = new URLRequest(m_fPath+m_dataFile);
			var dataLoader:URLLoader = new URLLoader();
			dataLoader.dataFormat = dataFormat;
			dataLoader.addEventListener(Event.COMPLETE, dataLoaderCompleteHandler);
			dataLoader.load(myRequest);
			trace(v);
		}
 
		private function dataLoaderCompleteHandler(e:Event):void {
			v="v in dataLoaderCompleteHandler";
		}
	}

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

Регистрация: May 2008
Сообщений: 52
Дело в том, что событие Event.COMPLETE происходит не сразу, а через некоторое время. И как только загрузка завершается вызывается функция dataLoaderCompleteHandler.
Т.е. порядок выполнения таков:
Код AS3:
var myRequest:URLRequest = new URLRequest(m_fPath+m_dataFile);
var dataLoader:URLLoader = new URLLoader();
dataLoader.dataFormat = dataFormat;
 
// Здесь функция dataLoaderCompleteHandler не исполняется, а лишь будет исполнена после успешной загрузки(Event.COMPLETE)
dataLoader.addEventListener(Event.COMPLETE, dataLoaderCompleteHandler);
 
dataLoader.load(myRequest);
trace(v);
// И только через некоторое время исполнится код
v="v in dataLoaderCompleteHandler"; // Здесь Вы присваивайте переменной v значение "v in dataLoaderCompleteHandler" - т.е. сам текст
// Тут и надо трейсить v


Последний раз редактировалось Aldvin; 02.03.2009 в 17:05.
Старый 02.03.2009, 17:11
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Вместо Event.COMPLETE, надо использовать Event.INIT
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 02.03.2009, 18:05
Abdilxamidov вне форума Посмотреть профиль Отправить личное сообщение для Abdilxamidov Найти все сообщения от Abdilxamidov
  № 4  
Ответить с цитированием
Abdilxamidov

Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
а вроде такого события Event.INIT в URLLoader-е нету.
И - да, в самом обработчике переменная живет, но при выходе из него - пропадает, хотя вроде она должна быть доступна всем внутри класса, как ее получить другой функцией этого класса (хотя мне, вообще-то нужно это значение использовать совсем другим классом, входящим в этот пакет)?

Старый 02.03.2009, 18:23
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Не внимательно прочитал. Aldvin все верно написал.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 02.03.2009, 18:30
Abdilxamidov вне форума Посмотреть профиль Отправить личное сообщение для Abdilxamidov Найти все сообщения от Abdilxamidov
  № 6  
Ответить с цитированием
Abdilxamidov

Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
последовательность выполнения я понял, ну а как-же использовать значение переменной, присваиваемое именно в этом обработчике, в другом классе пакета?

Добавлено через 4 часа 58 минут
Народ, неужели решения не существует?, вроде это должно быть просто: одна функция класса при выполнении (какая разница как она вызывается) изменяет параметр своего класса. Или, может, я чего-то не догоняю? Я уже 3 дня этим парюсь!

Добавлено через 28 часов 58 минут
Люди, а-у! Есть кто живой?


Последний раз редактировалось Abdilxamidov; 03.03.2009 в 23:27.
Старый 04.03.2009, 09:57
Aldvin вне форума Посмотреть профиль Отправить личное сообщение для Aldvin Найти все сообщения от Aldvin
  № 7  
Ответить с цитированием
Aldvin

Регистрация: May 2008
Сообщений: 52
Ответа Вы не получаете из-за плохо поставленого вопроса.
Попробуем предположить:
Если доступ к переменной v нужен из любой функции этого класса, то с этим проблем быть не может.
Если же Вам нужен доступ из другого класса, то опять же всё должно работать... например, в неком третьем классе создаем экземпляр первого класса(LearningR4) и экземпляр второго класса(OtherClass, из которого будем обращатся к переменной v)
Код AS3:
var a:LearningR4=LearningR4();
var b:OtherClass=new OtherClass(a);
т.е. в класс OtherClass мы передали ссылку на экземпляр класса LearningR4(т.е. на a)
Класс OtherClass должен иметь следующий вид:
Код AS3:
public class OtherClass {
	public function OtherClass(instanceOfLearningR4:LearningR4) {
                 trace(instanceOfLearningR4.v);
	}
}
Это на мой взгляд самый простой способ и многочисленных

Старый 04.03.2009, 12:55
Abdilxamidov вне форума Посмотреть профиль Отправить личное сообщение для Abdilxamidov Найти все сообщения от Abdilxamidov
  № 8  
Ответить с цитированием
Abdilxamidov

Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
прошу прощения за плохо поставленный вопрос. Я пытался

Добавлено через 34 минуты
Спасибо Aldvin за ответ! Попробую еще уточнить:
Да, мне нужен доступ к переменной v из другого класса, причем, чтобы она имела значение измененное в теле обработчика dataLoaderCompleteHandler(). А обязательно создавать некий 3-й класс?
Вот я во втором классе пишу так:
Код AS3:
public class OtherClass {
	public function OtherClass() {
                 var a = new LearningR4;//создаю экземпляр класса LearningR4()
 
a.myFunction(m_fPath, m_dataFile)//выполняю ф-цию, загружающую данные из файла
trace(a.v);//
	}
}
так вот я не получаю в trace(a.v) значение v, установленное в dataLoaderCompleteHandler, а именно ""v in dataLoaderCompleteHandler"

Добавлено через 36 минут
В этом и заключается проблема

Добавлено через 4 часа 22 минуты
Ура! Разобрался, всем огромное спасибо!

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

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

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


 


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


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