19.9.使用复杂XML数据来填充组件

19.9.1. 问题
当所显示的XML 包含多个内嵌子节点时, 应如何确保该层次架构会被正确地展示?
19.9.2. 解决办法
可以使用mx.controls.Tree 或AdvancedDataGrid 控件去显示数据。创建一个HierarchicalData对象, 并将该XML 传递给它, 以确保Tree 或AdvancedDataGrid 可以在XML 架构中正确地定位。
19.9.3. 讨论
要去显示下列基于Tree 或AdvancedDataGrid 控件的XML 菜单, 你可以使用HierarchicalData对象去确保数据会被正确地显示。代码如下:
+展开
-XML
<mx:XMLList id="foodXML">
<menu label="Menu">
<breakfast_menu label="Breakfast">
<food label="Eggs and Homefriesprice="$6.95"
description="Two eggs, homefries, toast, coffee"/>

<food label="Itemname="Strawberry Belgian Waffles"
price="$7.95description="light Belgian waffles with strawberries and whipped cream"/>

</breakfast_menu>
<lunch_menu label="Lunch">
<food label="Soup and Sandwichprice="$8.95description="Sandwich served with hot soup"/>
</lunch_menu>
</menu>
</mx:XMLList>

HierarchicalData 会把XML 或内嵌数据对象包装以提供下列方法, 用来让显示控件可以正确地显示XML 中各个节点的关系:
canHaveChildren(node:Object):Boolean
如果该节点可以包含子项,则返回true。

getChildren(node:Object):Object
返回表示节点子项的Object。

getData(node:Object):Object
返回节点中的数据。

getRoot():Object
返回根数据项。

hasChildren(node:Object):Boolean
如果该节点包含子项,则返回true。

要把XML 包装到一个HierarchicalData 对象里, 并传递到其构造函数中, 可以这样做:
+展开
-ActionScript
var hData:HierarchicalData = new HierarchicalData(myXMLObj);

在以下的例子, menuList XMLList 项目会被传递到一个HierarchicalData 对象中, 并在AdvancedDataGrid 组件中显示:代码如下:
+展开
-XML
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxmlwidth="400height="300creationComplete="init()">
<mx:Script>
<![CDATA[
import
mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
import mx.collections.HierarchicalData;
private function init():void {
}
private function labelFunc(item:Object,
column:AdvancedDataGridColumn):String
{
if(String(item.@label) != "") {
return String(item.@label);
}
return "";
}

]]>
</mx:Script>
<mx:AdvancedDataGrid
dataProvider="{new HierarchicalData(foodXML)}width="100%"
height="100%">

<mx:columns>
<mx:AdvancedDataGridColumn dataField="name"
labelFunction="labelFunc"/>

<mx:AdvancedDataGridColumn dataField="@description"/>
<mx:AdvancedDataGridColumn dataField="@price"/>
</mx:columns>
</mx:AdvancedDataGrid>
</mx:VBox>

加支付宝好友偷能量挖...


评论(0)网络
阅读(126)喜欢(0)flash/flex/fcs/AIR