是的,有一个像这样的问题,但没有活动也没有答案。
我想使用HTTPService从外部XML文件加载数据,并且在同一HTTPService的ResultEvent上,我希望他使用XML中的数据填充ArrayCollection。
我认为ArrayCollection是这个XML的理想选择。但我愿意接受建议。
XML
<?xml version="1.0" encoding="utf-8"?>
<PhotoGalleryData>
<Photo>
<id>1</id>
<name>Summer Vacation</name>
<description>In vacation</description>
<source>vacation.JPG</source>
</Photo>
<Photo>
<id>2</id>
<name>Winter Vacation</name>
<description>coold</description>
<source>vacation2.JPG</source>
</Photo>
</PhotoGalleryData>
我认为getDataResultHandler()
中的这一简单行足以填充ArrayCollection。
<mx:HTTPService id="getData"
url="{XMLDataFileLocation}"
fault="getDataFaultHandler()"
result="getDataResultHandler()"/>
[Bindable]
private var PhotoData:ArrayCollection;
private function getDataResultHandler():void
{
PhotoData = new ArrayCollection(getData.lastResult.PhotoGalleryData.photo)
}
但我想这不是,因为只是为了确保我已经将一个List绑定到ArrayCollection以实际查看它是否真的已填充。
<mx:List dataProvider="{PhotoData}" labelField="name"/>
并且列表没有显示任何数据,因此不能正常工作。
感谢您的帮助。
修改
注意
使用的
<mx:List/>
就是这样 确定ArrayCollection是 确实人口稠密,它不会被用于 App。
采取Bozho建议的结果。
使用Bozho更改Flex不再报告var类型错误,但是一旦我运行它。 Adobe Flash会报告此事。
TypeError:错误#1034:输入强制 失败:无法转换 mx.utils :: ObjectProxy @ 22cd311 to mx.collections.ArrayCollection。在 图片集锦/ getDataResultHandler()[C:\用户\法比奥 Antunes \ Documents \ Flex Builder 3 \ Photo 画廊的\ src \动作脚本\ PhotoGallery.as:56] 在 图片集锦/ __ getData_result()[C:\用户\法比奥 Antunes \ Documents \ Flex Builder 3 \ Photo Gallery \ src \ PhotoGallery.mxml:23] at flash.events::EventDispatcher/dispatchEventFunction() 在 flash.events::EventDispatcher/dispatchEvent() 在 mx.rpc.http.mxml ::的HTTPService / http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[C:\自动构建\ 3.2.0 \框架\项目\ RPC \ SRC \ MX \ RPC \ HTTP \ MXML \ HTTPService.as:290] 在 mx.rpc :: AbstractInvoker / http://www.adobe.com/2006/flex/mx/internal::resultHandler()[C:\自动构建\ 3.2.0 \框架\项目\ RPC \ SRC \ MX \ RPC \ AbstractInvoker.as:193] 在 mx.rpc ::响应/结果()[C:\自动构建\ 3.2.0 \框架\项目\ RPC \ SRC \ MX \ RPC \ Responder.as:43] 在 mx.rpc :: AsyncRequest /应答()[C:\自动构建\ 3.2.0 \框架\项目\ RPC \ SRC \ MX \ RPC \ AsyncRequest.as:74] 在 DirectHTTPMessageResponder /在completeHandler()[C:\自动构建\ 3.2.0 \框架\项目\ RPC \ SRC \ MX \消息\通道\ DirectHTTPChannel.as:403] 在 flash.events::EventDispatcher/dispatchEventFunction()
然后Flash第23行报告错误:
PhotoData = ArrayCollection(event.result);
第23行是:
result="getDataResultHandler(event)"
答案 0 :(得分:3)
如果您可以使用XMLListCollection
代替ArrayCollection
,则转换结果对象的过程会更加简单。 Here是一个很好的教程,解释了如何解决这个问题。
编辑:
本教程的主要内容是:
e4x
。您需要将结果对象强制转换为XML
对象,将重复节点提取为XMLList
,并从列表中构造XMLListCollection
,如下所示:
private function httpService_result(evt:ResultEvent):void
{
var xmlList:XMLList = XML(evt.result).path.to.repeating.element;
xmlListColl = new XMLListCollection(xmlList);
}
答案 1 :(得分:0)
您可以像这样简化脚本:
<mx:HTTPService id="getData" url="{XMLDataFileLocation}"/>
<mx:List dataProvider="{getData.lastResult.Photo}" labelField="name"/>
lastResult
的{{1}}将成为XML的根。通过检索getData
,您将获得lastResult.Photo
张照片。