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

Вернуться   Форум Flasher.ru > Flash > Flex

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

Регистрация: Dec 2006
Сообщений: 16
По умолчанию Опишитие процесс создания, plz

Добрый всем день.
Встала потребность сделать CD каталог. Все данные храняться в файле XML. Там 3 уровня тегов. Раздел -> Наименования -> Описание

Собственно все просто: слева менюшка Tree с Разделами и Наименованиями, Справа текстовое поле с описанием.

Я себе представлял процесс работы приложения таким:

1. Загрузить XML файл в объект mysourceXML
2. Создать XML объект mymenuXML для меню, на основе mysourceXML(выкинуть ненужные элементы и оставить только Разделы и Наименования)
3. Присвоить объекту Tree mymenuXML
пока хватит.

Все скрипты уже написаны - загвоздка в первом этапе.
Есть .mxml файл (главный), есть .as файл с функциями, в котором написаны все функции к которым я обращаюсь из mxml.
Функция загрузки выглядит так:

public static function loadXML(src:String)
{
var myXML:XML = new XML();
var XML_URL:String = src;
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);

function xmlLoaded():void
{
myXML = XML(myLoader.data);
trace("Data loaded.");
}
}


Сам ничего не придумывал - все из Help.
Проблема в том, что загрузка .xml файла происходит с задержкой, поэтому надо использовать addEventListener. Так что если в конце функции поставить return(myXML);, чтобы вернуть то, что загрузили, то возвращает 0.....на момент выполнения return myXML еще пуст.
Эта функция выполняется при старте приложения. Все что потом - рабоатет в реалтайме, но вот ее нужно подождать.
Вопрос - как так сделать, чтобы 2 и 3 шаги подождали выполнения этой функции. Можно сделать тупо вызов функции создания меню из функции xmlLoaded():, но это неудобно - не могу из .as файла назначить компоненту меню Tree dataProvider.....оттуда его не видно, так как он находиться в mxml файле.....
Если у кого есть мысли как его достать оттуда или как заставить все приложение ждать выполнения функции xmlLoaded - буду счастлив безгранично.
Спасибо.

Старый 18.12.2006, 20:27
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 2  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
на старте, заблокируй все контролы (myButton.enabled = false и так ко всему), и когда загрузится, разблокируй. и вызывай методы инициализаторы.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 18.12.2006, 23:26
Kindoro вне форума Посмотреть профиль Отправить личное сообщение для Kindoro Найти все сообщения от Kindoro
  № 3  
Ответить с цитированием
Kindoro

Регистрация: Dec 2006
Сообщений: 16
Цитата:
Сообщение от Nirth
на старте, заблокируй все контролы (myButton.enabled = false и так ко всему), и когда загрузится, разблокируй. и вызывай методы инициализаторы.
Сорри, не понятно.
Какие контролы? У меня запускаеться приложение, потом нужно сделать последовательно три шага, описанные выше......в моем случае чего блокировать-то?
Не мог бы ты по-подробнее опсиать что нужно блокировать, и каким методом.....?
Спасибо.

Старый 19.12.2006, 00:22
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 4  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Tree - контрол
создать Tree, заблокировать его (я написал как), и на событие загрузки, отпарсить хмл и присвоить его Tree, в чем проблема?
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 19.12.2006, 00:46
Kindoro вне форума Посмотреть профиль Отправить личное сообщение для Kindoro Найти все сообщения от Kindoro
  № 5  
Ответить с цитированием
Kindoro

Регистрация: Dec 2006
Сообщений: 16
Цитата:
Сообщение от Nirth
Tree - контрол
создать Tree, заблокировать его (я написал как), и на событие загрузки, отпарсить хмл и присвоить его Tree, в чем проблема?
Проблема в том, что в Tree мы грузим mymenuXML, который получаем из mysourceXML. Чтобы получить mysourceXML нужно подождать. Флекс не ждлет, а идет дальше и вызов функции создания mymenuXML происходит когда еще mysourceXML пуст. Так что вызвать функцию создания mymenuXML можно только из xmlLoaded - это eventListener.
Вся эта телега в .as файле. там свой Package и свой Класс.
До Tree мне оттуда доступ никак не получить.
Иными словами по логике вещей надо сделать так:
1. написать 2 функции:
1. загрузка XML - loadxml("путь к файлу"):XML;
2. создание на его основе getmenu():XML;
2. поочереди вызвать mysouceXML:XML = loadxml("путь к файлу"); потом mymenuXML:XML = getmenu(mysouceXML):XML;
3. назначить mymenuXML объекту Tree.

Вся засада в том, что так не пойдет.....обработчик не ждет загрузки XML, а идет дальше.....и передает в функцию getmenu() пустой ьнsourceXML.

Вот это и есть проблема.
К объекту Tree у меня вопросов нет.


Последний раз редактировалось Kindoro; 19.12.2006 в 01:18.
Старый 19.12.2006, 01:46
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 6  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
как понимать никак не получить, передачу ссылок кто то запретил?

Код:
myClassInstance.treeReference = myTree
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 19.12.2006, 02:10
Kindoro вне форума Посмотреть профиль Отправить личное сообщение для Kindoro Найти все сообщения от Kindoro
  № 7  
Ответить с цитированием
Kindoro

Регистрация: Dec 2006
Сообщений: 16
Все. Проблема решена.
Доступ к Tree получен после добавления строчки import mx.controls.Tree;
Все работает в такой цепи:
eventListenera xmlLoaded() вызываем функцию getmenuXML();
в конце которой назначаем созданный menuXML к myTree.dataProvider


P.S.:
кстати господа из Адоби в хелпе лишь в одном далеком месте упомянули о том, что нужно такие строчки добавлять......а в разделе Flex 2 Developer's Guide > Using Flex Programming Languages > Developing Applications in MXML > Developing applications > Using the id property with MXML tags об этом ни слоа

Но в любом случае, ставим им 5 за Flex. Рульная вещь. Давно в ней назрела необходимость.


Последний раз редактировалось Kindoro; 19.12.2006 в 02:34.
Старый 19.12.2006, 11:12
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 8  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
господа из адоб не расчитывали на крутых перцев которые читают документацию через страницу, они привыкли к людям, которые читают ее полностью
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

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

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

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


 


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


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