![]() |
|
||||||||||
|
|||||
|
Имеется каталог, разделённый на несколько XML по производителям. Сначала грузится XML с именами производителей и названиями категорий для каждого из них, потом соответствующие XML для каждого производителя.
Первый примитивный вариант успешно работает: var ref = this;
System.useCodepage = true;
parseXML1 = new XML();
parseXML1.ignoreWhite = true;
parseXML1.onLoad = function(success:Boolean) {
if (success) {
_global.vendors[1].products = new Object();
_global.vendors[1].products = parseXML1.makeObj();
} else {
trace("Error!");
}
delete ref.parseXML;
};
parseXML2 = new XML();
parseXML2.ignoreWhite = true;
parseXML2.onLoad = function(success:Boolean) {
if (success) {
_global.vendors[2].products = new Object();
_global.vendors[2].products = parseXML2.makeObj();
} else {
trace("Error!");
}
delete ref.parseXML;
};
parseXML2.load("content/adamand.xml");
parseXML1.load("content/agates.xml");
stop();
var ref = this;
System.useCodepage = true;
parseXML = new Array();
for (i=1; i<vendors.length; i++) {
ref.parseXML[i] = new XML();
ref.parseXML[i].ignoreWhite = true;
ref.parseXML[i].onLoad = function(success:Boolean) {
if (success) {
_global.vendors[i].products = new Object();
_global.vendors[i].products = ref.parseXML[i].makeObj();
} else {
trace("Error!");
}
delete ref.parseXML[i];
};
ref.parseXML[i].load("content/"+vendors[i].cat+".xml");
}
stop();
XML-файлы совсем маленькие, общий объём 6кБ в чём проблема - неясно необходимость в массиве, элементы которого динамически удаляются по мере парсинга была связана с тем, что элементы по идее загружаются и парсятся независимо, асинхронно. И если применить в качестве промежуточного единственный объект, то возникаеть необходиомость в перекрёстных ссылках с функции обработки события загрузки на функцию загрузки нового вендора. А от рекурсии я стараюсь избавляться по возможности, учитывая ограничения во флеше.
__________________
Бесплатная Flash CMS Qubix с открытым кодом и индексацией в поисковиках. |
|
|||||
|
Ветеран форума
Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
|
|
|
|||||
<vendors> <v cat="all" name="Все заводы" /> <v cat="agates" name="Агатес" /> <v cat="adamand" name="Адаманд" /> <v cat="adamas" name="Адамас" /> </vendors> trace(i) даёт 1 2 3
__________________
Бесплатная Flash CMS Qubix с открытым кодом и индексацией в поисковиках. Последний раз редактировалось etc; 24.03.2007 в 13:48. |
|
|||||
|
внутри ref.parseXML[i].onLoad ref.parseXML[i] это this попробуй поменять. и с i внутри onLoad поаккуратней )
|
|
|||||
|
спасибо, постоянно натыкался на это с присвоением обработки событий для кнопок в цикле, а здесь не заметил подвоха
![]() привожу работающий вариант: var ref = this;
System.useCodepage = true;
parseXML = new Array();
for (i=1; i<vendors.length; i++) {
ref.parseXML[i] = new XML();
ref.parseXML[i].ignoreWhite = true;
ref.parseXML[i].num = i;
ref.parseXML[i].onLoad = function(success:Boolean) {
if (success) {
_global.vendors[this.num].products = new Object();
_global.vendors[this.num].products = this.makeObj();
} else {
trace("Error!");
}
delete this;
};
ref.parseXML[i].load("content/"+vendors[i].cat+".xml");
}
stop();
__________________
Бесплатная Flash CMS Qubix с открытым кодом и индексацией в поисковиках. |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|