![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 69
|
Суть такова: есть страны, в каждой стране есть лиги(->команды->игроки и т.д). Списки лиг находятся в разных папках и файлах. Нужно вывести каждую страну и её лиги. Вот код:
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++; } } россия премьер-лига молодёжные команды первый дивизион второй дивизион англия премьер-лига конференция шотландия премьер-лига д1 д2 д3 Но после обработки выдаёт лишь: россия англия шотландия премьер-лига д1 д2 д3 Т.е метод completeLeague вызывается 1 раз и почему то самым последним. Жду идей и подсказок... |
|
|||||
|
Регистрация: Dec 2009
Сообщений: 41
|
Рискну предположить, что вызываемый метод:
в функции clickBtn вполне себе асинхронный, и нужно выполнять его последовательно. Т.е, выполняешь для первого url, слушаешь и парсишь ответ, потом вновь выполняешь запрос к следующей url и т.д. Тут поможет какая-нибудь глобальная переменная-счетчик, которая видна из двух функций сразу. |
|
|||||
|
Регистрация: 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. Что делать не могу додуматься...подкиньте пару идей кто что думает... |
|
|||||
|
Регистрация: Aug 2009
Сообщений: 23
|
попробуйте убрать static в функции completeLeague()
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 69
|
без static:
1120: Обращение несуществующего свойства completeSearchLeague. |
|
|||||
|
Регистрация: Aug 2009
Сообщений: 23
|
completeSearchLeague? - а где он в коде? В этом коде нет обращения к этому свойству...
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 69
|
completeLeague*...так правильно.
|
|
|||||
|
Регистрация: Aug 2009
Сообщений: 23
|
Странно... вообще в Вашем случае static не может так сильно мешать вызвать функцию(точнее отсутствие статика). Ведь вызов идет этого же класса.
Уберите статик и в функции нажатии кнопки(может ругается, из-за того что из статического метода вызывается обычный)... - даже если это не решит проблему, статические методы используются довольно редко, только если действительно необходимо. Ваши функции лучше делать обычными. Если Вы вызываете этого класс из-вне, то не забывайте создать экземпляр класса(т.к. статики вызываются без него, а вот обычные - только после создания экземпляра) т.е. Если все же это не решит проблему. Тогда советую для проверки поставить trace(или alert.show()) в функцию completeLeague() и посмотреть сколько раз она действительно вызывается. Если только один - будем думать почему. Если же несколько раз(но в labelllllllll выводится только один), то проблема в самой функции. Тогда лучше использовать несколько переменных типа String и потом склеивать в один ответ. Т.к. вызывать один и тот же лейбл в разных функциях черевато ошибками. |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 69
|
Функция вызывается столько раз сколько укажешь вот только загружается именно последний элемент из цикла...в общем вот:
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); } <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, время: 12:58. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|