Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Подготовка внешних XML данных и загрузка их в компонент (http://www.flasher.ru/forum/showthread.php?t=103519)

quazare 06.11.2007 22:27

Подготовка внешних XML данных и загрузка их в компонент
 
Народ, хочу спросить кто как грузить внешние XML данные в компоненты - например (ComboBox и DataGrid).

Есть такая XML:

Код:

<?xml version="1.0" encoding="utf-8"?>
<spisok>
<razdel>раздел 1</razdel>
<razdel>раздел 2</razdel>
<razdel>раздел 3</razdel>
</spisok>

Как правильно обработать эти данные и загрузить их в компонент? Я делаю так:

1.Инициализирую массивы и загрузку:

Код:

[Bindable]
public var externalXML:XML=new XML();               
public var cards:Array =new Array();

private function initApp():void {
        var loader:URLLoader = new URLLoader();
        var request:URLRequest = new URLRequest("xmlFile.xml");
        loader.load(request);
        loader.addEventListener(Event.COMPLETE, onComplete);               
        }

private function onComplete(event:Event):void {
    var loader:URLLoader = URLLoader(event.target);
    externalXML = XML(loader.data);
 
        for (var i:int=0; i<externalXML.children().length(); i++){
                cards[i]={label:externalXML.children()[i].toString()};
        }
}

2.Через dataProvider загоняю массив в компонент:

Код:

<mx:ComboBox x="93" y="34" id="razdel"  dataProvider="{cards}" width="191"></mx:ComboBox>
Вроде все отображается и загружается (для комбобоха), но как-то кривовато(то что не нравиться я выделил красным).

Кроме того, массив cards[i] -вообще не воспринимается через dataProvider в DataGrid.

Прошу помочь правильно описать данный массив для компонентов ComboBox и DataGrid.

Большое спасибо! :umnik2:

fishbounce 06.11.2007 23:47

а почему просто не написать так:
Код:

<mx:ComboBox x="93" y="34" id="razdel"  dataProvider="{externalXML..razdel}" width="191" />
?
тока в начале надо так написать:
Код:

[Bindable]
public var externalXML : XML = null;


librio 07.11.2007 16:22

1. Лично мне удобнее всего работать с ArrayCollection, потому как там кроме всего прочего, есть удобные средства сортировки, фильтрации и проч.
2. Лучше все-таки избегать глобальных переменных как у тебя сейчас (рельно можно обойтись без нее в приведенном примере).
3. Просто совет: если тебе придется загружать много одинаковых по структуре XML - сразу напиши обертку над HTTPService (под конкретный протокол) - это сильно облегчит задачу в будущем.

На счет "неуклюжести" не беспокойся. Чего переживать из-за одной такой строчки. Многие пишут сотни строк неуклюжего кода и не краснеют. Главное - результат

zlatko 07.11.2007 18:08

Цитата:

Сообщение от librio
3. Просто совет: если тебе придется загружать много одинаковых по структуре XML - сразу напиши обертку над HTTPService (под конкретный протокол) - это сильно облегчит задачу в будущем.

Извините что встряю, но можна чуточку поподробнее ? :rolleyes:

librio 07.11.2007 18:34

Цитата:

Сообщение от zlatko
Извините что встряю, но можна чуточку поподробнее ? :rolleyes:

Что именно поподробнее? Как написать обертку?
В двух словах:
1. Определяемся с протоколом (причем в обе стороны)
2. Пишем ядро класса, отвечающего за посылку запроса/получение ответа
3. Пишем функционал удобного добавления параметров в запрос (например методом push(param, value))
4. Пишем функционал обработки результата. То есть чтобы нам сразу приходило кастомное событие с сформированным как нам нужно ArrayCollection и дополнительной инфой из ответа.

= Получаем хорошо расширяемую обертку. Поменяли протокол? - меняем только этот класс и перекомпиливаем все модули, которые его используют. И все. Думаю понятны преимущества такого подхода.

quazare 07.11.2007 19:05

Цитата:

Сообщение от librio
1. Лично мне удобнее всего работать с ArrayCollection, потому как там кроме всего прочего, есть удобные средства сортировки, фильтрации и проч.
2. Лучше все-таки избегать глобальных переменных как у тебя сейчас (рельно можно обойтись без нее в приведенном примере).
3. Просто совет: если тебе придется загружать много одинаковых по структуре XML - сразу напиши обертку над HTTPService (под конкретный протокол) - это сильно облегчит задачу в будущем.

На счет "неуклюжести" не беспокойся. Чего переживать из-за одной такой строчки. Многие пишут сотни строк неуклюжего кода и не краснеют. Главное - результат

дело не совсем в неуклюжести - все работает, но для компонента Комбобокс не отображает элемент "по умолчанию", подскажите как это сделать.

Кроме того, если не сильно сложно, представь пожалуйста вариант через АррайКоллекшенс.

Большое спасибо

zlatko 08.11.2007 12:30

2 librio
Понял. Спасибо !

quazare 08.11.2007 16:09

Народ, а по теме кто-нибудь мне ответит?

librio 08.11.2007 17:36

Цитата:

Сообщение от quazare
дело не совсем в неуклюжести - все работает, но для компонента Комбобокс не отображает элемент "по умолчанию", подскажите как это сделать.
Кроме того, если не сильно сложно, представь пожалуйста вариант через АррайКоллекшенс.

А что ты видишь по умолчанию в combo box?
На счет ArrayCollection - примеры ищи в help, там они есть.

quazare 08.11.2007 20:30

Цитата:

Сообщение от librio
А что ты видишь по умолчанию в combo box?
На счет ArrayCollection - примеры ищи в help, там они есть.

дак в том-то и дело. что в комбо боксе - по умолчанию ничего не стоит - а должен - первый элемент списка... как сие исправить...


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

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