![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Есть 3 xml необходимо по очереди загрузить с трёх xml инфу.
Когда делаю циклом, информация загружается только с последнего xml. for (var n:Number = 0; n < 3; n++) { urlList = "myXML" + n + ".xml"; xml.load(urlList); } Только вот пока что это не выходит. |
|
|||||
|
Регистрация: May 2008
Адрес: москва
Сообщений: 63
|
KiL33,а_сутьба_объединить_в_одиН?
|
|
|||||
|
я бы сделал так:
XML.prototype.ignoreWhite = true; var XML_toLoad:XML = new XML(); var XML_Array:Array = ["images.xml", "text.xml", "info.xml"]; var loaded_XML:Array = []; var counter:Number = 0; XML_toLoad.onLoad = function() { loaded_XML.push(new XML(this)); if (counter < XML_Array.length - 1) { counter++; this.load(XML_Array[counter]); } else trace(loaded_XML); }; XML_toLoad.load(XML_Array[counter]); Последний раз редактировалось Fatality; 23.01.2009 в 21:40. |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 669
|
Ну либо загружать по очереди (вызывать загрузку следующего после загрузки текущего), либо 3 объекта хмл создавать
|
|
|||||
|
Fatality, Спасибо за пример он хорош, но есть пара недостатков. Возможно они возникли потому что вопрос мой был не полностью раскрыт.
XMl-ок может быть свободное количество, ну к примеру за максимум возьмём три. И само собой создавать массив с перечислением имен файлов не есть в моем случае хорошо. Разумеется проще цикл. Сами представьте если xml-ок будет больше двух десятков. Информация в xml представляет собой атрибуты, с помощью которых строится структура Очередной раз соглашусь с kuruki в данном случае с поочередной загрузкой. import mx.utils.Delegate; var urlList:Array; var textLoader:XML; // Составляем список имён файлов. urlList = new Array(); for (var n:Number = 0; n < 3; n++) { urlList[n] = "myXML" + n + ".xml"; } textLoader = new XML(); textLoader.onData = Delegate.create(this, onText); // Обработчик события XML.onData function onText(value:String):Void { //txt1.text += value; // Загружаем xml-ки xml.load(urlList[0]); xml.ignoreWhite = true; trace("ЗАГРУЖЕНО __"+urlList[0]) // Если файлы не кончились, грузим следующий. if (urlList.length > 0) { var fileName:String; fileName = urlList[0]; urlList.shift(); textLoader.load(fileName); } } onText(); Атрибуты считываются только с первого, хотя трейс показывает, что все xml по очереди были загружены В примере полноценный код. Есть пара откровенных косяков, может кто-нибудь поможет исправить. Последний раз редактировалось KiL33; 24.01.2009 в 10:31. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
var xml:XML = new XML(); xml.onLoad = xmlLoaded; var xmlDocs:Array = new Array(); var xmlCounter:Number = 0; function xmlLoaded(ok:Boolean) { if (ok) { trace("загружена XML : "+xmlCounter); xmlDocs.push(this.firstChild); xmlCounter += 1; loadXML(xmlCounter); } else { trace('...а больше нету...'); done(); } } function loadXML(count:Number) { xml.load("myXML"+count+".xml"); } //// cтартуем загрузку loadXML(0); //// все xml'ки загружены function done() { var startY:Number = 0; for (var doc:Number = 0; doc<xmlDocs.length; doc++) { var node:XMLNode = xmlDocs[doc].firstChild; var i:Number = 0; while (node) { if (node.nodeName == 'node') {trace(node) var message = this.attachMovie('mc', 'mc'+doc+'_'+i, this.getNextHighestDepth()); message.txt.autoSize = true; message.txt_var = node.attributes['label']; message._y = startY; startY+=30; i++; } node = node.nextSibling; } } }
__________________
Reality.getBounds(this); |
|
|||||
|
Спасибо, это реализовано значительно лучше, чем даже как я хотел сделать
![]() Только вот, сколько ни долблюсь одного не понимаю, почему делая мувик кнопкой я не могу получить инфу с атрибутов. if (node.nodeName == 'node') {trace(node)
var message = this.attachMovie('mc', 'mc'+doc+'_'+i,
this.getNextHighestDepth());
message.txt.autoSize = true;
message.txt_var = node.attributes['label'];
message._y = startY;
message.onPress=function(){
_root.txt= node.attributes['label'];
}
startY+=30;
i++;
}
node = node.nextSibling;
}
}
}
Последний раз редактировалось KiL33; 24.01.2009 в 18:19. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Потому что node нет ни в кнопке, ни в руте. Эта переменная существует только в обработчике загрузки и только пока выполняется функция. Проще говоря, недоступна.
Так что нужен механизм для связывания кнопок и нодов - либо запоминать всю инфу прямо в свойствах кнопки message (собственно, лейбл у вас и сохраняется в переменной message.txt_var - кстати, что за допотопный способ? почему не message.txt.text?) - либо все ноды хранить в массиве, в кнопках сохранять индексы по которым искать ноды - это на случай, если инфы в одном ноде много и сохранять всю в переменных кнопки не оптимально. И вот...
__________________
Reality.getBounds(this); |
|
|||||
|
Честно говоря, я не замечал разницы. А она вообще есть?
|
|
|||||
|
Ещё одна проблема.
По мере необходимости мне нужно удалять xml’ки и удаляю я их не по порядку, а в разброс, т.е. допустим xml’ок 10 я удаляю пятую и вот здесь возникает проблема, если обрывается порядковая цепочка цифр то xml’ки считаются только до 4 хотя после 4 идут еще 6 7 8 9 10 xml’ок. Можно с этим что-то сделать? |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|