PDA

Просмотр полной версии : В ComboBox данные из внешнего XML - как?


Hamster Walker
29.09.2006, 15:38
Привет,

Как затащить данные в DataGrid используя <mx:HTTPService> я разобрался, а вот c ComboBox - бьюсь, как рыба об лед!
З.Ы. Прошу ногами не пинать, Фак читал... :)

Nirth
29.09.2006, 17:14
Если по вашему мнению, на форуме все телепаты вы ошибаетесь, выкладывайте пример того как вы это делаете

Hamster Walker
02.10.2006, 11:09
Пытался точно так же, как с DataGrid-ом, но если я правильно понимаю, тут должен быть линейный источник данных, а не многоуровневый.

Пример источника данных:

<?xml version="1.0" encoding="windows-1251" ?>
<ValCurs Date="30.09.2006" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>20,0260</Value>
</Valute>
</ValCurs>

Само приложение:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="myReq.send()">
<mx:HTTPService
id="myReq"
url="http://www.cbr.ru/scripts/XML_daily.asp"
useProxy="false" />
<mx:ComboBox dataProvider="{myReq}">
<!-- Чем, и главное, как его населять? -->
</mx:ComboBox>
</mx:Application>

З.Ы. Я уверен, телепаты на форуме есть :)

fishbounce
02.10.2006, 23:01
Думаю, чем его населять, тебе должно быть виднее, я точно не телепат.
А как... ну, например, так:

<mx:HTTPService
id="myReq"
url="http://www.cbr.ru/scripts/XML_daily.asp"
useProxy="false" />
<mx:ComboBox dataProvider="{myReq.lastResult}" labelField="[че-нить]" />

Nirth
02.10.2006, 23:29
Если честно, я не понимаю этой мании юзать XML для List\ComboBox\HorizontalList\TileList


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:XML id="data" xmlns="">
<ValCurs Date="30.09.2006" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>20,0260</Value>
</Valute>
</ValCurs>
</mx:XML>
<mx:XMLListCollection source="{data.Valute.children()}" id="dp" />
<mx:ComboBox labelField="text" dataProvider="{dp}" id="box"/>
</mx:Application>


В твоем случае замени <mx:XML> на <mx:HTTPSerivce>

Hamster Walker
03.10.2006, 18:04
Думаю, чем его населять, тебе должно быть виднее, я точно не телепат.
А как... ну, например, так:

<mx:HTTPService
id="myReq"
url="http://www.cbr.ru/scripts/XML_daily.asp"
useProxy="false" />
<mx:ComboBox dataProvider="{myReq.lastResult}" labelField="[че-нить]" />

Так я пробовал - не работает, увы.

Hamster Walker
03.10.2006, 18:44
Если честно, я не понимаю этой мании юзать XML для List\ComboBox\HorizontalList\TileList
Аргументы? Есть готовый источник данных, почему бы им не воспользоваться? В принципе, я могу преобразовать данные в любой вид, какой вид предпочтительней на твой взгляд?
В твоем случае замени <mx:XML> на <mx:HTTPSerivce>
c <mx:XML> выводит в ComboBox всю ветку ValCurs, с <mx:HTTPSerivce> пустой ComboBox. И я никак не могу понять, как разобрать данные, что бы в нем выводилось только поле <Name>. В доках только примеры с массивами внутри кода, с которыми все ясно, мне же нужен внешний источник.

fishbounce
03.10.2006, 19:09
попробуй так:

<mx:HTTPService
id="myReq"
url="http://www.cbr.ru/scripts/XML_daily.asp"
useProxy="false" />
<mx:ComboBox
dataProvider="{XML(myReq.lastResult).Valute}"
labelField="Name" />

fishbounce
03.10.2006, 19:11
и вообще, ты уверен, что httpService у тебя работает?
Да, кстати, еще у твоего httpService нужно поставить атрибут:

resultFormat="e4x"

кажется, так

Nirth
03.10.2006, 19:33
слушай мой пример показывает что надо...

Hamster Walker
04.10.2006, 13:45
и вообще, ты уверен, что httpService у тебя работает?

Спасибо! Все получилось, сейчас вникаю дальше! Предстоит еще с кодировками разобраться - источник в виндовой кодировке, а приложение в юникоде. В принципе, предполагается, что оно будет работать в локалке, а там у меня ColdFusion черта может перекодировать, но для развития лобных долей покопаюсь! :)

Hamster Walker
04.10.2006, 13:48
слушай мой пример показывает что надо...
Прежде чем написать, я проверил. Увы.
З.Ы. Лаконичность не всегда сестра таланта. ИМХО.

Nirth
04.10.2006, 19:42
children() не работает?

fishbounce
04.10.2006, 20:23
Кстати, Nirth, думаю, в твоем примере должно быть несколько исправлений:
у XMLListCollection

source="{data.Valute}"

а в ComboBox :

labelField="Name"

Ему же нужно именования валют выводить

Hamster Walker
05.10.2006, 11:36
Ему же нужно именования валют выводить
Да, то что надо! Еще раз спасибо! Буду разбираться с событиями.
Кстати, а как правильней в ComboBox иконки вставить, а то я делаю по аналогии с гридом:
<mx:ComboBox id="myComboBox"
dataProvider="{XML(myReq.lastResult).valuta}"
labelField="name"
rowCount="{myReq.lastResult.numitems}"
width="320"
x="10"
y="10">
<mx:itemRenderer>
<mx:Component>
<mx:HBox verticalAlign="middle">
<mx:Image source="img/{data.charcode}.jpg" toolTip="{data.name}" />
<mx:Label text="{data.name}" />
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:ComboBox>
Но в этом случае пропадает анимация раскрытия списка, он вываливается с некоторой задержкой. В какую сторону смотреть?

Nirth
05.10.2006, 20:34
Ну можно сделать класс ItemRenderer'a отдельным.
http://orangeflash.eu/?p=33

Hamster Walker
05.10.2006, 21:11
Ну можно сделать класс ItemRenderer'a отдельным.
Ок! Я уже думал. Попробую.