Stop Black PR!
24.03.2007, 02:03
Имеется каталог, разделённый на несколько 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 формируется и его можно посмотреть, а вот ref.parseXML[i] оказывается undefined. Хотя тот же код с обычной переменной работал.
XML-файлы совсем маленькие, общий объём 6кБ
в чём проблема - неясно
необходимость в массиве, элементы которого динамически удаляются по мере парсинга была связана с тем, что элементы по идее загружаются и парсятся независимо, асинхронно. И если применить в качестве промежуточного единственный объект, то возникаеть необходиомость в перекрёстных ссылках с функции обработки события загрузки на функцию загрузки нового вендора. А от рекурсии я стараюсь избавляться по возможности, учитывая ограничения во флеше.
Первый примитивный вариант успешно работает:
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 формируется и его можно посмотреть, а вот ref.parseXML[i] оказывается undefined. Хотя тот же код с обычной переменной работал.
XML-файлы совсем маленькие, общий объём 6кБ
в чём проблема - неясно
необходимость в массиве, элементы которого динамически удаляются по мере парсинга была связана с тем, что элементы по идее загружаются и парсятся независимо, асинхронно. И если применить в качестве промежуточного единственный объект, то возникаеть необходиомость в перекрёстных ссылках с функции обработки события загрузки на функцию загрузки нового вендора. А от рекурсии я стараюсь избавляться по возможности, учитывая ограничения во флеше.