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

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

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

Регистрация: Sep 2007
Сообщений: 117
По умолчанию как использовать Event.COMPLETE

Добрый день.
Есть код, который вытаскивает данные из xml файла, используя прослушивание события "Event.COMPLETE":

Код AS1/AS2:
package
{
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.events.Event;
 
	public class XMLData 
	{
		public var xml:String = "xml.xml";
		public var xmlLoader:URLLoader =  new URLLoader(new URLRequest(xml));
		public var xmlData:XML;
		public var xmlList:XMLList;
		public var imageNameSmall:String;
		public var imageNameBig:String;
 
		public function XMLData():void
		{
			xmlLoader.addEventListener(Event.COMPLETE, getImagesNameFromXML);
 
			function getImagesNameFromXML(event:Event):void {
				xmlData = XML(event.target.data);
				xmlList = xmlData.children();
				imageNameSmall = xmlList[0].attributes()[0];
				imageNameBig = xmlList[0].attributes()[1];
                                // trace(imageNameSmall );
			}	
		}
 
		public function traceSmt():void{
			trace(imageNameSmall);
		}
	}
}
Теперь если попытаться обратиться к методу traceSmt():
Код AS1/AS2:
var my_mc:XMLData = new XMLData();
my_mc.traceSmt();
то получим
Код AS3:
null
Однако если раскомментировать сторку
Код AS3:
  // trace(imageNameSmall );
то нужное значение выведится на экран.
То есть мы получаем данные из xml файла, а передать их куда либо не можем - можем пользоваться ими только непосредственно в конце конструктора XMLData.
Подскажите плз что надо сделать что бы
Код AS3:
 my_mc.traceSmt();
выдавал не null.


Последний раз редактировалось inMashine; 07.07.2010 в 10:54.
Старый 07.07.2010, 10:50
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 2  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
А где у тебя функция getImagesNameFromXML которую ты вызываешь после Complete?

Старый 07.07.2010, 10:54
inMashine вне форума Посмотреть профиль Отправить личное сообщение для inMashine Найти все сообщения от inMashine
  № 3  
Ответить с цитированием
inMashine
 
Аватар для inMashine

Регистрация: Sep 2007
Сообщений: 117
сори - опечатка
она ниже строчкой

Старый 07.07.2010, 10:57
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 4  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
вынеси getImagesNameFromXML как метод класса XMLData.
Код AS3:
package
{
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.events.Event;
 
	public class XMLData 
	{
		public var xml:String = "xml.xml";
		public var xmlLoader:URLLoader =  new URLLoader(new URLRequest(xml));
		public var xmlData:XML;
		public var xmlList:XMLList;
		public var imageNameSmall:String;
		public var imageNameBig:String;
 
		public function XMLData():void
		{
			xmlLoader.addEventListener(Event.COMPLETE, getImagesNameFromXML);
                       // а загрузка где? наверное так?
                        xmlLoader.load(new URLRequest(xml));
 
		}
 
                private function getImagesNameFromXML(event:Event):void {
				xmlData = XML(event.target.data);
				xmlList = xmlData.children();
				imageNameSmall = xmlList[0].attributes()[0];
				imageNameBig = xmlList[0].attributes()[1];
                                // trace(imageNameSmall );
		}
 
		public function traceSmt():void{
			trace(imageNameSmall);
		}
	}
}
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 07.07.2010 в 11:01.
Старый 07.07.2010, 10:58
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 5  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Скорей всего твоя проблема в том что ты traceSmt вызываешь до того как XML успел загрузиться.

Поставь traceSmt (); в конец функции getImagesNameFromXML, все будет в порядке. То есть он ее вызовет, когда уже XML загрузится, и присвоит переменную imageNameSmall.

Добавлено через 1 минуту
Выносить ничего не надо, это не повлияет, главное что imageNameSmall у тебя вынесено в общие переменные и ты можешь к нему обратиться.

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

Регистрация: Sep 2007
Сообщений: 117
Котяра, пробовал - не работает.


Tr1te, так и есть. Я об этом писал в первом посте.
Получается что мы получаем данные из xml файла, а передать их куда либо не можем.

Я думаю это от нехватки опыта, если кто сталкивался с этим - наверняка есть пути решения.


Последний раз редактировалось inMashine; 07.07.2010 в 11:07.
Старый 07.07.2010, 11:02
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 7  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Ну естественно не повлияет, все зависит от того когда ты вызываешь imageNameSmall. Если до загрузки, то он равен NULL, если после присвоения, то равен тому что присвоил.

Добавлено через 8 минут
Ну конечно мы можем их использовать и из других функций, просто вызывать их нужно после того как загрузил, и не обязательно в конце конструктора XMLData.

Добавлено через 11 минут
Например, если я загружаю хмл файл, я обращаюсь к загрузчику, скачай мне тото. Он загружает, и после завершения говорит тому кто просил: "я загрузил". И после этого я беру XML, из загрузчика, и делаю с ним что хочу.

Старый 07.07.2010, 11:15
inMashine вне форума Посмотреть профиль Отправить личное сообщение для inMashine Найти все сообщения от inMashine
  № 8  
Ответить с цитированием
inMashine
 
Аватар для inMashine

Регистрация: Sep 2007
Сообщений: 117
Код AS3:
просто вызывать их нужно после того как загрузил, и не обязательно в конце конструктора XMLData.
Если вызывать не в конце конструктора XMLData, то для флеша это означает, что он их еще не загрузил.

Код AS3:
Он загружает, и после завершения говорит тому кто просил: "я загрузил".
Можете это написать кодом?


Последний раз редактировалось inMashine; 07.07.2010 в 11:18.
Старый 07.07.2010, 11:22
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 9  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Код AS3:
		public function NW_XMLLoader(Server:int,FileID:int) {
 
			var FileLoader:URLLoader=new URLLoader(new URLRequest(URL_Path));
			FileLoader.addEventListener(Event.COMPLETE,FileLoader_Complete);
 
			function FileLoader_Complete(e:Event):void {
				FileLoader.removeEventListener(Event.COMPLETE,FileLoader_Complete);
				XMLFile=XML(e.currentTarget.data);
 
				parent.dispatchEvent(new Event("XMLFile_Loaded"));
			}
 
		}
Я диспетчу тому кто просил загрузить файл. После чего просящий может его забрать. В твоем случае можно вызвать функцию traceSmt.

В конце getImagesNameFromXML допиши:
Код AS3:
dispatchEvent(new Event("XMLFile_Loaded"));
Добавь слушателя:
Код AS3:
addEventListener("XMLFile_Loaded",noname);
И добавь функцию:
Код AS3:
function noname(e:Event):void {
traceSmt();
}

Старый 07.07.2010, 11:25
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 10  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
У вас была проблема что getImagesNameFromXML был анонимной ф-цией и вне контекста данные терялись.
при вынесении этой ф-ции в метод - всё должно работать.
Также в вашем коде не было
Код AS3:
xmlLoader.load(new URLRequest(xml));
Цитата:
Котяра, пробовал - не работает.
Что именно не работает?
__________________
Отряд Котовскага

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

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

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


 


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


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