![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Sep 2007
Сообщений: 117
|
Добрый день.
Есть код, который вытаскивает данные из xml файла, используя прослушивание события "Event.COMPLETE": 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); } } } То есть мы получаем данные из xml файла, а передать их куда либо не можем - можем пользоваться ими только непосредственно в конце конструктора XMLData. Подскажите плз что надо сделать что бы выдавал не null. Последний раз редактировалось inMashine; 07.07.2010 в 10:54. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
А где у тебя функция getImagesNameFromXML которую ты вызываешь после Complete?
|
|
|||||
|
Регистрация: Sep 2007
Сообщений: 117
|
сори - опечатка
она ниже строчкой |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
вынеси getImagesNameFromXML как метод класса XMLData.
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. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
Скорей всего твоя проблема в том что ты traceSmt вызываешь до того как XML успел загрузиться.
Поставь traceSmt (); в конец функции getImagesNameFromXML, все будет в порядке. То есть он ее вызовет, когда уже XML загрузится, и присвоит переменную imageNameSmall. Добавлено через 1 минуту Выносить ничего не надо, это не повлияет, главное что imageNameSmall у тебя вынесено в общие переменные и ты можешь к нему обратиться. |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 117
|
Котяра, пробовал - не работает.
Tr1te, так и есть. Я об этом писал в первом посте. Получается что мы получаем данные из xml файла, а передать их куда либо не можем. Я думаю это от нехватки опыта, если кто сталкивался с этим - наверняка есть пути решения. Последний раз редактировалось inMashine; 07.07.2010 в 11:07. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
Ну естественно не повлияет, все зависит от того когда ты вызываешь imageNameSmall. Если до загрузки, то он равен NULL, если после присвоения, то равен тому что присвоил.
Добавлено через 8 минут Ну конечно мы можем их использовать и из других функций, просто вызывать их нужно после того как загрузил, и не обязательно в конце конструктора XMLData. Добавлено через 11 минут Например, если я загружаю хмл файл, я обращаюсь к загрузчику, скачай мне тото. Он загружает, и после завершения говорит тому кто просил: "я загрузил". И после этого я беру XML, из загрузчика, и делаю с ним что хочу. |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 117
|
просто вызывать их нужно после того как загрузил, и не обязательно в конце конструктора XMLData. Можете это написать кодом? Последний раз редактировалось inMashine; 07.07.2010 в 11:18. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
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")); } } В конце getImagesNameFromXML допиши: Добавь слушателя: И добавь функцию: |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
У вас была проблема что getImagesNameFromXML был анонимной ф-цией и вне контекста данные терялись.
при вынесении этой ф-ции в метод - всё должно работать. Также в вашем коде не было Цитата:
__________________
Отряд Котовскага |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|