flex RESULT_FORMAT_E4X对象转化为ArrayCollection

刚接触flex. 在用HTTPService获取XML格式数据再绑定给DataGrid时.遇到一个很"奇怪"的问题

就是当xml的条目小于等于1时,就会出错. 很是郁闷了一段时间

后来才发现. 问题即不是出在HTTPService上,也不是出在DataGrid上. 而是出在 RESULT_FORMAT_E4X 型数据类型转化为ArrayCollection上

原来 event.result  返回的是object.  当一条记录时,赋给集合,那肯定是有问题
如果返回多于1条, 就会认为是集合.  再赋出ArrayCollection或绑定DataGrid就没问题了
所以返回的object 一定要转化.

 

以下的代码就不会出错了.

 

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Button label="Button" click="g();"/>

    <mx:DataGrid id="dg" width="100%" height="100%">
        <mx:columns>
        <mx:DataGridColumn dataField="a"/>
        <mx:DataGridColumn dataField="b"/>
        <mx:DataGridColumn dataField="c"/>
        </mx:columns>
    </mx:DataGrid>
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.http.HTTPService;
            [Bindable]
            private var xmls:ArrayCollection=new ArrayCollection();
            private var hs:HTTPService=new HTTPService();
            private function g():void
            {
                hs.url="http://localhost:8081/test.php?" + Math.random().toString();
                hs.resultFormat=HTTPService.RESULT_FORMAT_E4X;
                hs.addEventListener(ResultEvent.RESULT, r);
                hs.send();
            }
            private function r(event:ResultEvent):void
            {
                var xml:XML=event.result as XML;
                for each (var xm:XML in xml.item)
                {
                    xmls.addItem(xm);
                }
                dg.dataProvider=xmls;
            }
        ]]>
    </mx:Script>
</mx:Application>

posted on 2010-03-08 14:39  朋友圈自动点赞工具  阅读(931)  评论(0)    收藏  举报