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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 22.09.2004, 15:36
NaName вне форума Посмотреть профиль Отправить личное сообщение для NaName Найти все сообщения от NaName
  № 1  
NaName

Регистрация: Sep 2004
Сообщений: 3
Question XML и многомерный массив в ActionScript

Пишу скрипт, зашёл в тупик, упёрся в стену лбом ...
Загружаю XML-файл, читаю данные, перевожу в многомерный массив, массива нет, хотя в Debug > Variables List массив есть в том виде, в каком и требовалось. Код примерно такой (упростил по самые-самые):

Код:
global.table = new Array(); // массив для данных

XMLdata = new XML();
XMLdata.ignoreWhite = true;
XMLdata.load("data.xml"); // загружаю файл
XMLdata.onLoad = isXMLloaded;

function isXMLloaded(success)
{
    if (success) 
    {
        readXML(XMLdata.childNodes);
    }
}

function readXML(nodes) 
{
    for (var i = 0; i<nodes.length; i++) 
    {
        depthY++;
        //в этом месте расположен код для перевода данных XML в массив.
        //код работает, т. к. если, например, после него поставить
        //trace(_global.table[0][5]); то трассировщик выдаёт 
        //верный результат
        if (nodes[i].childNodes.length>0) 
        {
            depthX++;
            readXML(nodes[i].childNodes);
        }
    }
    depthX--;
}
//а если команду trace() вставить здесь, то данных из массива не дождёшься

Вот я и спрашиваю: где косяк?

Старый 22.09.2004, 15:56
Lego вне форума Посмотреть профиль Отправить личное сообщение для Lego Найти все сообщения от Lego
  № 2  
Lego
 
Аватар для Lego

Регистрация: Nov 2001
Адрес: Днепропетровск
Сообщений: 107
Отправить сообщение для Lego с помощью ICQ
А как ты делаешь trace(..) там, где оно не работает?
В первой строчке вместо _global написано global. Опечатка?
И где ты вызываешь эти функции?
__________________
Я не любопытный и хитрый, а любознательный и сообразительный!


Последний раз редактировалось Lego; 22.09.2004 в 16:00.
Старый 22.09.2004, 15:58
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 3  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
ты всё делаешь правильно. и весь код у тебя организован с расчетом на то, чтобы данные стали обрабатываться как только они будут загружены...

...так какого же черта ты пытаешься при этом трейсить данные массива, когда он не то что еще не создался, но даже ХМЛ для него еще не загрузился :)

Старый 22.09.2004, 17:32
NaName вне форума Посмотреть профиль Отправить личное сообщение для NaName Найти все сообщения от NaName
  № 4  
NaName

Регистрация: Sep 2004
Сообщений: 3
для Lego:
да, с global получилась опечатка, в оригинальном коде всё верно: _global ...
так, я начинаю дотумкивать, я пытаюсь обратиться к массиву не из функции, а из скрипта, помещённого во фрэйм в первом кадре, ... XML ещё не загрузился и данные из него в массив ещё не переведены, а я уже хочу получить ссылки из массива ... и хренашечки. Соответственно, надо делать вызов последовательно из функции. Правильно?

Старый 22.09.2004, 17:36
NaName вне форума Посмотреть профиль Отправить личное сообщение для NaName Найти все сообщения от NaName
  № 5  
NaName

Регистрация: Sep 2004
Сообщений: 3
Да, чуть не забыл: основной код тоже в первом фрэйме ...
Но обращаться к массиву мне надо из других клипов. Я понимаю, что это плохая практика - держать разные части скрипта в разных местах - но в моём случае так менее громоздко ...

Старый 22.09.2004, 18:00
Lego вне форума Посмотреть профиль Отправить личное сообщение для Lego Найти все сообщения от Lego
  № 6  
Lego
 
Аватар для Lego

Регистрация: Nov 2001
Адрес: Днепропетровск
Сообщений: 107
Отправить сообщение для Lego с помощью ICQ
XML грузится не сразу. Нужно какое-то время.
Делай так, проверенный способ:

myXML = new XML();
myXML.load("data.xml");

// событие, которое происходит после загрузки файла
myXML.onLoad = function(success)
{
if(success) {
readXML(...);
...
} else trace("Is not tres-bien!");
}
__________________
Я не любопытный и хитрый, а любознательный и сообразительный!

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

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

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


 


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


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