Есть несколько способов сделать это:
Пример набора данных:
<?xml version="1.0" encoding="UTF-8"?>
<events type="array">
<event>
<date>12-50-99</date>
<title>Event A</title>
<location>San Diego, CA</location>
</event>
<event>
<date>12-50-99</date>
<title>Event B</title>
<location>Healdsburg, CA</location>
</event>
</events>
Flex 4
XML декларации
Ниже приведены 3 способа передачи данных в XML или ArrayCollection, которые вы можете передать своему поставщику данных.
<?xml version="1.0" encoding="utf-8"?>
<s:Application
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:Declarations>
<fx:XML id="data" source="events.xml"/>
<fx:XML id="data2">
<event>
<date>12-50-99</date>
<title>Event A</title>
<location>San Diego, CA</location>
</event>
<event>
<date>12-50-99</date>
<title>Event B</title>
<location>Healdsburg, CA</location>
</event>
</fx:XML>
<fx:Declarations>
<mx:ArrayCollection id="data3">
<fx:Object date="12-50-99" title="Event A" location="San Diego, CA"/>
<fx:Object date="12-50-99" title="Event B" location="Healdsburg, CA"/>
</mx:ArrayCollection>
</fx:Declarations>
</fx:Declarations>
<!-- then your views -->
<mx:Button/>
</s:Application>
Flex 3 работает так же, но вы просто удаляете теги <fx:Declarations/>
.
Если вы хотите, чтобы данные были динамическими, я просто создал бы свойство для вашего ArrayCollection или XMLListCollection в блоке <mx:Script/>
в вашем представлении, скажем [Bindable] public var myData:ArrayCollection;
, и загрузил бы данные в него через XML. Сохраняя ваши данные внешними (без жесткого кодирования / встраивания данных в MXML), вам не нужно перекомпилировать, и проще добавлять все больше и больше.
Чтобы сделать это, вам нужно будет использовать URLRequest или HTTPService. HTTPService - это, по сути, оболочка MXML для URLRequest.
Примерно так: псевдокод:
<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
initialize="loadData()">
<fx:Script>
import mx.collections.*;
[Bindable] public var list1:IList;
[Bindable] public var list2:IList;
[Bindable] public var list3:IList;
public function loadData():void
{
eventsService.load(); // loads, may take a few frames/seconds
}
public function updateData(result:Object, property:String):void
{
// this["list1"] = xml;
this[property] = new XMLListCollection(result);
}
</fx:Script>
<fx:Declarations>
<mx:HTTPService id="eventsService"
url="events.xml"
resultFormat="e4x"
result="updateData(event.result, 'list1');"
fault="trace('eventsService Error');"/>
</fx:Declarations>
<!-- then your views -->
<mx:List dataProvider="{list1}"/>
</s:Application>
Дайте мне знать, если это работает.