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

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

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

Регистрация: Dec 2010
Сообщений: 69
По умолчанию Обработка нескольких XML, загвоздка.

Суть такова: есть страны, в каждой стране есть лиги(->команды->игроки и т.д). Списки лиг находятся в разных папках и файлах. Нужно вывести каждую страну и её лиги. Вот код:
Код AS3:
private static function clickBtn(e:MouseEvent):void
		{
			urlLeague = new URLRequest();
 
			for each (var Country:XML in xmlListCountrys.*)
			{	
 
				urlLeague.url = "Country/" + Country.SOURCE + "/" +
                                             Country.SOURCE + ".xml";//например : Country/en/en.xml - тут список лиг.
				LoadLeague = new URLLoader();
				LoadLeague.load(urlLeague);
                                             LoadLeague.addEventListener(Event.COMPLETE, completeLeague);
				mx.core.FlexGlobals.topLevelApplication.labellllllllllllll.text =    mx.core.FlexGlobals.topLevelApplication.labellllllllllllll.text + " " + Country.NAME;
 
			}
 
 
		}
 
		private static function completeLeague(e:Event):void
		{
 
			xmlListLeagues = new XML(LoadLeague.data);
 
			indexLeague = 0;
			for each (var League:XML in xmlListLeagues.*)
			{
			mx.core.FlexGlobals.topLevelApplication.labellllllllllllll.text =           mx.core.FlexGlobals.topLevelApplication.labellllllllllllll.text + " " + 
                                             xmlSearchLeague.*[indexLeague].NAME;				
				indexLeague++;
 
			}
 
		}
После этого в mx.core.FlexGlobals.topLevelApplication.labellllllllllllll.text он должен вывести следующее:
россия
премьер-лига
молодёжные команды
первый дивизион
второй дивизион
англия
премьер-лига
конференция
шотландия
премьер-лига
д1
д2
д3

Но после обработки выдаёт лишь:
россия
англия
шотландия
премьер-лига
д1
д2
д3
Т.е метод completeLeague вызывается 1 раз и почему то самым последним. Жду идей и подсказок...

Старый 30.03.2011, 16:26
spacecadet вне форума Посмотреть профиль Отправить личное сообщение для spacecadet Найти все сообщения от spacecadet
  № 2  
Ответить с цитированием
spacecadet

Регистрация: Dec 2009
Сообщений: 41
Рискну предположить, что вызываемый метод:
Код AS3:
LoadLeague.load(urlLeague);
в функции clickBtn вполне себе асинхронный, и нужно выполнять его последовательно. Т.е, выполняешь для первого url, слушаешь и парсишь ответ, потом вновь выполняешь запрос к следующей url и т.д. Тут поможет какая-нибудь глобальная переменная-счетчик, которая видна из двух функций сразу.

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

Регистрация: Dec 2010
Сообщений: 69
Проблема в том, что completeLeague больше одного раза не вызывается.Если вызвать в цикле со счётчиком то на втором заходе ошибка вылетает.
TypeError: Error #1010: A term is undefined and has no properties.
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
В итоге цикл проходит все страны и только потом вызывается completeLeague. Что делать не могу додуматься...подкиньте пару идей кто что думает...

Старый 06.04.2011, 15:40
OFFmind вне форума Посмотреть профиль Отправить личное сообщение для OFFmind Найти все сообщения от OFFmind
  № 4  
Ответить с цитированием
OFFmind

Регистрация: Aug 2009
Сообщений: 23
попробуйте убрать static в функции completeLeague()

Старый 06.04.2011, 16:48
Termer вне форума Посмотреть профиль Отправить личное сообщение для Termer Найти все сообщения от Termer
  № 5  
Ответить с цитированием
Termer

Регистрация: Dec 2010
Сообщений: 69
без static:
1120: Обращение несуществующего свойства completeSearchLeague.

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

Регистрация: Aug 2009
Сообщений: 23
completeSearchLeague? - а где он в коде? В этом коде нет обращения к этому свойству...

Старый 07.04.2011, 11:37
Termer вне форума Посмотреть профиль Отправить личное сообщение для Termer Найти все сообщения от Termer
  № 7  
Ответить с цитированием
Termer

Регистрация: Dec 2010
Сообщений: 69
completeLeague*...так правильно.

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

Регистрация: Aug 2009
Сообщений: 23
Странно... вообще в Вашем случае static не может так сильно мешать вызвать функцию(точнее отсутствие статика). Ведь вызов идет этого же класса.
Уберите статик и в функции нажатии кнопки(может ругается, из-за того что из статического метода вызывается обычный)... - даже если это не решит проблему, статические методы используются довольно редко, только если действительно необходимо. Ваши функции лучше делать обычными.
Если Вы вызываете этого класс из-вне, то не забывайте создать экземпляр класса(т.к. статики вызываются без него, а вот обычные - только после создания экземпляра)
т.е.
Код AS3:
var myCalss: MyClass = new MyClass();
Если все же это не решит проблему. Тогда советую для проверки поставить trace(или alert.show()) в функцию completeLeague() и посмотреть сколько раз она действительно вызывается. Если только один - будем думать почему. Если же несколько раз(но в labelllllllll выводится только один), то проблема в самой функции. Тогда лучше использовать несколько переменных типа String и потом склеивать в один ответ. Т.к. вызывать один и тот же лейбл в разных функциях черевато ошибками.

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

Регистрация: Dec 2010
Сообщений: 69
Функция вызывается столько раз сколько укажешь вот только загружается именно последний элемент из цикла...в общем вот:
Код AS3:
private static function clickBtnSearch(e:MouseEvent):void
		{
                                  indexCountry = 5; //проверим первые 5 стран
 
			for ( var i:int = 0; i < indexCountry; i ++)
			{
				xmlListPro = loadListLeagues(i);
				mx.core.FlexGlobals.topLevelApplication.textTest.text = mx.core.FlexGlobals.topLevelApplication.textTest.text + xmlListPro;
			}
 
private static function loadListLeagues(IndexCountrys:int):XML
		{
			urlSearchLeague = new URLRequest();		
			urlSearchLeague.url = "Country/" + xmlListCountrys.*[IndexCountrys].SOURCE + "/" + xmlListCountrys.*[IndexCountrys].SOURCE + ".xml";
			LoadSearchLeague = new URLLoader();
			LoadSearchLeague.load(urlSearchLeague);	
			LoadSearchLeague.addEventListener(Event.COMPLETE, completeSearchLeague);
 
			return xmlSearchLeague;
		}
 
		private static function completeSearchLeague(e:Event):void
		{
			xmlSearchLeague = new XML(LoadSearchLeague.data);
		}
А вот что получаем в mx.core.FlexGlobals.topLevelApplication.textTest.text:
<SPAIN>
<LEAGUE>
<NAME>Примера</NAME>
<SOURCE>pr</SOURCE>
</LEAGUE>
<LEAGUE>
<NAME>Сегунда</NAME>
<SOURCE>seg</SOURCE>
</LEAGUE>
</SPAIN><SPAIN>
<LEAGUE>
<NAME>Примера</NAME>
<SOURCE>pr</SOURCE>
</LEAGUE>
<LEAGUE>
<NAME>Сегунда</NAME>
<SOURCE>seg</SOURCE>
</LEAGUE>
</SPAIN><SPAIN>
<LEAGUE>
<NAME>Примера</NAME>
<SOURCE>pr</SOURCE>
</LEAGUE>
<LEAGUE>
<NAME>Сегунда</NAME>
<SOURCE>seg</SOURCE>
</LEAGUE>
</SPAIN><SPAIN>
<LEAGUE>
<NAME>Примера</NAME>
<SOURCE>pr</SOURCE>
</LEAGUE>
<LEAGUE>
<NAME>Сегунда</NAME>
<SOURCE>seg</SOURCE>
</LEAGUE>
</SPAIN><SPAIN>
<LEAGUE>
<NAME>Примера</NAME>
<SOURCE>pr</SOURCE>
</LEAGUE>
<LEAGUE>
<NAME>Сегунда</NAME>
<SOURCE>seg</SOURCE>
</LEAGUE>
</SPAIN>
Если indexCountry изменить на 1 или, 2 или 3,4..10 то будет выдавать 1 раз первую страну и её лиги, или 2 раза вторую..10 раз десятую страну и её лиги и т.д...

Добавлено через 15 минут
пробовал записывать результат в массив, результат тот же: в каждый элемент записывается
<SPAIN>
<LEAGUE>
<NAME>Примера</NAME>
<SOURCE>pr</SOURCE>
</LEAGUE>
<LEAGUE>
<NAME>Сегунда</NAME>
<SOURCE>seg</SOURCE>
</LEAGUE>
</SPAIN>...

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

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

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


 


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


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