Как связать значение узла xml с выпадающим полем данных во Flex?
Возможно, это вопрос новичка, но после просмотра сети я все еще не могу найти ответ... У меня есть объект XML, подобный этому:
<questionpools>
<questionpool id="1">
<name>Sample test bank</name>
<description>This is a Sample test bank description</description>
<createdate>2010.10.10</createdate>
<moddate>2010.10.11</moddate>
<createdby>testuser</createdby>
<modby>testuser</modby>
</questionpool>
<questionpool id="2">
<name>alme</name>
<description>newpool</description>
<createdate>2010.10.31</createdate>
<moddate>2010.10.31</moddate>
<createdby>testuser</createdby>
<modby>testuser</modby>
</questionpool>
<questionpool id="9">
<name>pool_new</name>
<description>newpool</description>
<createdate>2010.10.31</createdate>
<moddate>2010.10.31</moddate>
<createdby>testuser</createdby>
<modby>testuser</modby>
</questionpool>
Я загружаю этот файл в переменную XML:
var poolMenuXML:XMLList = questionpoolsXML.questionpools;
poolMenu = new XMLListCollection(poolMenuXML.children());
и привязать узел 'name' к полю метки выпадающего списка
<s:DropDownList id="s_poolnumber" dataProvider="{poolMenu}" labelField="name"></s:DropDownList>
но как добавить атрибут id в качестве поля данных в раскрывающемся списке, чтобы при выборе элемента он возвращал это поле?
Должен ли я создать пользовательский компонент, который использует атрибут @id в качестве источника значений данных? (Я также попытался добавить узел, который может помочь, но, к сожалению, он тоже не работает...)
спасибо Питер
1 ответ
Решение
Передайте весь объект и получите атрибут id позже. Смотрите метод onDropDownListChange
<?xml version="1.0" encoding="utf-8"?>
<s:Application
minHeight="600"
minWidth="955"
creationComplete="application1_creationCompleteHandler(event)"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
import mx.collections.XMLListCollection;
import mx.events.FlexEvent;
import spark.events.IndexChangeEvent;
[Bindable] private var poolMenu:XMLListCollection;
private var questionpoolsXML:XML = <questionpools>
<questionpool id="1">
<name>Sample test bank</name>
<description>This is a Sample test bank description</description>
<createdate>2010.10.10</createdate>
<moddate>2010.10.11</moddate>
<createdby>testuser</createdby>
<modby>testuser</modby>
</questionpool>
<questionpool id="2">
<name>alme</name>
<description>newpool</description>
<createdate>2010.10.31</createdate>
<moddate>2010.10.31</moddate>
<createdby>testuser</createdby>
<modby>testuser</modby>
</questionpool>
<questionpool id="9">
<name>pool_new</name>
<description>newpool</description>
<createdate>2010.10.31</createdate>
<moddate>2010.10.31</moddate>
<createdby>testuser</createdby>
<modby>testuser</modby>
</questionpool>
</questionpools>;
private function application1_creationCompleteHandler(event:FlexEvent):void
{
poolMenu = new XMLListCollection(questionpoolsXML.children());
}
private function onDropDownListChange(event:IndexChangeEvent):void
{
trace(s_poolnumber.selectedItem.@id);
}
]]>
</fx:Script>
<s:DropDownList id="s_poolnumber"
dataProvider="{poolMenu}"
labelField="name"
change="onDropDownListChange(event)"/>
</s:Application>