Flex中如何动态的载入XML并显示在DataGrid中的例子
By Minidxer | June 3, 2009
接下来的例子演示了Flex中如何动态的载入XML并显示在DataGrid。
让我们先来看一下Demo(可以右键View Source或点击这里察看源代码):
下面是完整代码(或点击这里察看):
Download: main.mxml
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application name="DataGrid_XML_test"
- xmlns:mx="http://www.adobe.com/2006/mxml"
- xmlns:net="flash.net.*"
- layout="vertical"
- verticalAlign="middle"
- backgroundColor="white">
- <mx:Script>
- <![CDATA[
- import mx.events.ListEvent;
- import mx.controls.dataGridClasses.DataGridColumn;
- public namespace sitemapNS = "http://www.google.com/schemas/sitemap/0.84";
- private function loadXML(targetURL:String):void {
- urlLdr.load(new URLRequest(targetURL));
- loadBtn.enabled = false;
- }
- private function urlLdr_complete(evt:Event):void {
- var xmlData:XML = new XML(URLLoader(evt.currentTarget).data);
- xmlListColl = new XMLListCollection(xmlData.children());
- dataGrid.enabled = true;
- loadBtn.enabled = true;
- }
- private function dataGrid_labelFunc(item:XML, col:DataGridColumn):String {
- var qN:QName = new QName(sitemapNS, col.dataField);
- return item[qN].text();
- }
- private function dataGrid_dateLabelFunc(item:XML, col:DataGridColumn):String {
- var qN:QName = new QName(sitemapNS, col.dataField);
- var value:String = item[qN].text();
- value = value.replace(/-/g, "/");
- value = value.replace("T", " ");
- value = value.replace("+00:00", "");
- return value;
- }
- private function dataGrid_itemDoubleClick(evt:ListEvent):void {
- use namespace sitemapNS;
- var url:String = evt.itemRenderer.data.loc;
- navigateToURL(new URLRequest(url), "_blank");
- }
- ]]>
- </mx:Script>
- <net:URLLoader id="urlLdr"
- complete="urlLdr_complete(event);" />
- <mx:XMLListCollection id="xmlListColl" />
- <mx:ApplicationControlBar dock="true">
- <mx:Button id="loadBtn"
- label="Load XML"
- click="loadXML('http://blog.flexexamples.com/sitemap.xml');" />
- <mx:Spacer width="100%" />
- <mx:ProgressBar id="progressBar"
- mode="event"
- source="{urlLdr}"
- labelPlacement="center" />
- </mx:ApplicationControlBar>
- <mx:DataGrid id="dataGrid"
- dataProvider="{xmlListColl}"
- doubleClickEnabled="true"
- itemDoubleClick="dataGrid_itemDoubleClick(event);"
- enabled="false"
- width="100%"
- height="100%">
- <mx:columns>
- <mx:DataGridColumn dataField="loc"
- labelFunction="dataGrid_labelFunc"
- itemRenderer="mx.controls.Label" />
- <mx:DataGridColumn dataField="lastmod"
- labelFunction="dataGrid_dateLabelFunc"
- width="150" />
- <mx:DataGridColumn dataField="changefreq"
- labelFunction="dataGrid_labelFunc"
- width="100" />
- <mx:DataGridColumn dataField="priority"
- labelFunction="dataGrid_labelFunc"
- width="100" />
- </mx:columns>
- </mx:DataGrid>
- </mx:Application>
代码:Peter deHaan 翻译/整理/编译:中文Flex例子
Topics:
DataGrid |
1 Comment » |
Tags: DataGrid, doubleClickEnabled, itemDoubleClick, QName, URLLoader, use namespace
本例由于调用了http://blog.flexexamples.com/sitemap.xml 的xml文件,载入比较困难,大家可以在本地尝试一下。