有你可以做到這一點的幾種方法:
的樣本數據集:
<?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聲明
以下是將數據導入XML或ArrayCollection的3種方法,其中包括wh你可以傳給你的數據提供者。
<?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/>
標記。
如果您希望數據是動態的,我只需在您的視圖的<mx:Script/>
塊中爲您的ArrayCollection或XMLListCollection創建一個屬性,例如[Bindable] public var myData:ArrayCollection;
,然後通過XML將數據加載到該塊中。通過將數據保持在外部(而不是將數據硬編碼/嵌入到MXML中),您不必重新編譯,而且添加越來越容易。
爲了做到這一點,您需要使用URLRequest或HTTPService。 HTTPService基本上是一個圍繞URLRequest的MXML包裝器。
事情是這樣的僞代碼:
<?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>
讓我知道是否可行。
我想這是我正在尋找。如果在data3初始化程序中,我使用
2010-02-06 19:54:31
我不明白。 在第一個示例(外部XML文件)或第二個示例(內嵌XML)中實例化哪種類型/類的對象?例如,這兩個例子都沒有涉及「事件」是什麼的定義。 「事件」從哪裏來?您的示例是否假定它已被定義在某處?還是它是Object類的,日期,標題和位置是鍵值對的關鍵字? 爲什麼要實例化無類型數據? 隨着道歉是密集的,對你的企圖賜教(和那些誰潛伏在我後面),我 恭敬地十分讚賞, 吉姆普拉蒙登 德州 – 2010-02-07 03:35:10
遺憾的是,XML對象都是動態的,但如果您手動處理xml,則可以將其轉換爲鍵入的類。假設如果您自己不手動處理xml,並將其傳遞給dataProvider,flex會將其轉換爲動態對象(ObjectProxy,如果resultFormat是默認的,而不是e4x)。 ObjectProxy和Object都基本上只是鍵值對的散列。這是否回答你的問題? – 2010-02-16 05:51:31