![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
|
Здравствуйте, помогите, не могу сам разобраться, да и весь интернет облазил. Вот, например, есть такой код. Как сделать, чтобы значение переменной v , установленное в обработчике dataLoaderCompleteHandler было, например, передано в ф-цию myFunction? Сейчас trace(v) там выдает null
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"; } } |
|
|||||
|
Регистрация: May 2008
Сообщений: 52
|
Дело в том, что событие Event.COMPLETE происходит не сразу, а через некоторое время. И как только загрузка завершается вызывается функция dataLoaderCompleteHandler.
Т.е. порядок выполнения таков: 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. |
|
|||||
|
Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
|
а вроде такого события Event.INIT в URLLoader-е нету.
И - да, в самом обработчике переменная живет, но при выходе из него - пропадает, хотя вроде она должна быть доступна всем внутри класса, как ее получить другой функцией этого класса (хотя мне, вообще-то нужно это значение использовать совсем другим классом, входящим в этот пакет)? |
|
|||||
|
Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
|
последовательность выполнения я понял, ну а как-же использовать значение переменной, присваиваемое именно в этом обработчике, в другом классе пакета?
Добавлено через 4 часа 58 минут Народ, неужели решения не существует?, вроде это должно быть просто: одна функция класса при выполнении (какая разница как она вызывается) изменяет параметр своего класса. Или, может, я чего-то не догоняю? Я уже 3 дня этим парюсь! Добавлено через 28 часов 58 минут Люди, а-у! Есть кто живой? Последний раз редактировалось Abdilxamidov; 03.03.2009 в 23:27. |
|
|||||
|
Регистрация: May 2008
Сообщений: 52
|
Ответа Вы не получаете из-за плохо поставленого вопроса.
Попробуем предположить: Если доступ к переменной v нужен из любой функции этого класса, то с этим проблем быть не может. Если же Вам нужен доступ из другого класса, то опять же всё должно работать... например, в неком третьем классе создаем экземпляр первого класса(LearningR4) и экземпляр второго класса(OtherClass, из которого будем обращатся к переменной v) т.е. в класс OtherClass мы передали ссылку на экземпляр класса LearningR4(т.е. на a) Класс OtherClass должен иметь следующий вид: Это на мой взгляд самый простой способ и многочисленных |
|
|||||
|
Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
|
прошу прощения за плохо поставленный вопрос. Я пытался
Добавлено через 34 минуты Спасибо Aldvin за ответ! Попробую еще уточнить: Да, мне нужен доступ к переменной v из другого класса, причем, чтобы она имела значение измененное в теле обработчика dataLoaderCompleteHandler(). А обязательно создавать некий 3-й класс? Вот я во втором классе пишу так: public class OtherClass { public function OtherClass() { var a = new LearningR4;//создаю экземпляр класса LearningR4() a.myFunction(m_fPath, m_dataFile)//выполняю ф-цию, загружающую данные из файла trace(a.v);// } } Добавлено через 36 минут В этом и заключается проблема Добавлено через 4 часа 22 минуты Ура! Разобрался, всем огромное спасибо! |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|