Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.03.2007, 02:03
Stop Black PR! вне форума Посмотреть профиль Отправить личное сообщение для Stop Black PR! Посетить домашнюю страницу Stop Black PR! Найти все сообщения от Stop Black PR!
  № 1  
Ответить с цитированием
Stop Black PR!
 
Аватар для Stop Black PR!

Регистрация: Aug 2003
Адрес: Moscow
Сообщений: 113
Отправить сообщение для Stop Black PR! с помощью ICQ
По умолчанию Array of XML странно работает

Имеется каталог, разделённый на несколько 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кБ

в чём проблема - неясно

необходимость в массиве, элементы которого динамически удаляются по мере парсинга была связана с тем, что элементы по идее загружаются и парсятся независимо, асинхронно. И если применить в качестве промежуточного единственный объект, то возникаеть необходиомость в перекрёстных ссылках с функции обработки события загрузки на функцию загрузки нового вендора. А от рекурсии я стараюсь избавляться по возможности, учитывая ограничения во флеше.

Старый 24.03.2007, 02:13
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 2  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Код:
ref.parseXML[i].load("content/"+vendors[i].cat+".xml");

trace (i)

цикл for там не работает
__________________
Free-lance | Twitter | Me

Старый 24.03.2007, 02:40
Stop Black PR! вне форума Посмотреть профиль Отправить личное сообщение для Stop Black PR! Посетить домашнюю страницу Stop Black PR! Найти все сообщения от Stop Black PR!
  № 3  
Ответить с цитированием
Stop Black PR!
 
Аватар для Stop Black PR!

Регистрация: Aug 2003
Адрес: Moscow
Сообщений: 113
Отправить сообщение для Stop Black PR! с помощью ICQ
Код:
<vendors>
	<v cat="all" name="Все заводы" />
	<v cat="agates" name="Агатес" />
	<v cat="adamand" name="Адаманд" />
	<v cat="adamas" name="Адамас" />
</vendors>
сначала грузится вот это, а потом по длине списка вендоров идёт цикл

trace(i) даёт 1 2 3


Последний раз редактировалось etc; 24.03.2007 в 13:48.
Старый 24.03.2007, 18:55
Fann вне форума Посмотреть профиль Отправить личное сообщение для Fann Найти все сообщения от Fann
  № 4  
Ответить с цитированием
Fann
 
Аватар для Fann

Регистрация: Jun 2006
Адрес: crimea
Сообщений: 69
Отправить сообщение для Fann с помощью ICQ
внутри ref.parseXML[i].onLoad ref.parseXML[i] это this попробуй поменять. и с i внутри onLoad поаккуратней )

Старый 24.03.2007, 19:05
Stop Black PR! вне форума Посмотреть профиль Отправить личное сообщение для Stop Black PR! Посетить домашнюю страницу Stop Black PR! Найти все сообщения от Stop Black PR!
  № 5  
Ответить с цитированием
Stop Black PR!
 
Аватар для Stop Black PR!

Регистрация: Aug 2003
Адрес: Moscow
Сообщений: 113
Отправить сообщение для Stop Black PR! с помощью ICQ
спасибо, постоянно натыкался на это с присвоением обработки событий для кнопок в цикле, а здесь не заметил подвоха

привожу работающий вариант:

Код:
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();

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:20.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.