It is a rare case that you want to use mx:Model or the default
resultFormat="object".  You take the performance hit for the conversion,
you have no control over the conversion process (your strings that look
like numbers will get converted to numbers, willy nilly) and you wind up
with dynamic objects, which have an access peformance penalty.

 

I advise using resultFormat="e4x", a result handler function, and an
instance variable to hold the xmlResult.

 

The best performance, especially in a multi-renderer DataGrid, will be
if you manually convert the XML node data ino an ArrayCollection of
strongly typed value objects.

 

Tracy

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of Sean Clark Hess
Sent: Wednesday, July 02, 2008 4:05 PM
To: [email protected]
Subject: Re: [flexcoders] Inspecting data from HTTPService result to an
ArrayCollection

 

Ah, got it. 

The <mx:Model> tag converts everything to a flat object.  So the minute
you use it, you no longer have xml. 

It's still easy enough to loop through though.  

var result:Object = myData.getItemAt(0);
for (var name:String in result)
{
trace(name + " :: " + result[name]);
}

should output
apple :: 81768
orange :: 60310
banana :: 43357



On Wed, Jul 2, 2008 at 1:46 PM, Stephen More <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> > wrote:

Here is my output:

DEBUG: 2 null
[object Object]
CHECK : false
CHECK : false

Here is all the code:
<?xml version="1.0"?>
<!-- charts/XMLFileToArrayCollectionDataProvider.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
<http://www.adobe.com/2006/mxml> "
width="100%" height="100%">
<mx:Script>
import mx.utils.ArrayUtil;
</mx:Script>

<mx:Model id="results" source="../assets/data.xml"/>
<mx:ArrayCollection id="myData"
source="{ArrayUtil.toArray(results.result)}"
/>

<mx:Panel title="Line Chart">
<mx:LineChart id="chart" dataProvider="{myData}" showDataTips="true">
<mx:horizontalAxis>
<mx:CategoryAxis categoryField="month"/>
</mx:horizontalAxis>
<mx:series>
<mx:LineSeries yField="banana" displayName="Banana"/>
<mx:LineSeries yField="apple" displayName="Apple"/>
<mx:LineSeries yField="orange" displayName="Orange"/>
</mx:series>
</mx:LineChart>

<mx:Button id="iconButton" label="Button with Icon"
labelPlacement="right" color="#993300"
click="printMessage(event);"/>

<mx:Script>
<![CDATA[

import flash.events.Event;

// Event handler function to print a message
// describing the selected Button control.
private function printMessage(event:Event):void {
//message.text += event.target.label + " pressed" + "\n";



var myXML:XML;
myXML = myData.getItemAt(0) as XML;

trace( "DEBUG: " + myData.length + " " + myXML );
trace( myData.getItemAt(0) );


trace("CHECK : " + (myData.getItemAt(0) is XML));

trace("CHECK : " + (myData.getItemAt(0) is XMLList));
}

]]>
</mx:Script>

</mx:Panel>
</mx:Application>



On Wed, Jul 2, 2008 at 3:34 PM, Sean Clark Hess <[EMAIL PROTECTED]
<mailto:seanhess%40gmail.com> > wrote:
> What do you get when you trace myData.getItemAt(0)? That will return
null
> if it isn't an XML. You can do this too:
>
> trace("CHECK : " + (myData.getItemAt(0) is XML));
>
> You can check to see if it is an XMLList too, but I thought looking at
it,
> it seemed like a flat xml.
>
> On Wed, Jul 2, 2008 at 1:32 PM, Stephen More <[EMAIL PROTECTED]
<mailto:stephen.more%40gmail.com> > wrote:
>>
>> Thats what I was thinking but when I try:
>>
>> var myXML:XML;
>> myXML = myData.getItemAt(0) as XML;
>> trace( "DEBUG: " + myXML );
>>
>> I get
>> DEBUG: null
>>
>> On Wed, Jul 2, 2008 at 2:30 PM, Sean Clark Hess <[EMAIL PROTECTED]
<mailto:seanhess%40gmail.com> >
>> wrote:
>> > Each row is an xml object...
>> >
>> > So, (myData.getItemAt(i) as XML).children()
>> >
>> > Then you could loop through the children and ask them for their
name.
>> > After
>> > the as XML step you can do anything you can normally do with the
XML
>> > object
>> >
>> > On Wed, Jul 2, 2008 at 12:11 PM, Stephen More
<[EMAIL PROTECTED] <mailto:stephen.more%40gmail.com> >
>> > wrote:
>> >>
>> >> ( Example code taken from:
>> >> http://livedocs.adobe.com/flex/201/html/charts_intro_108_12.html
<http://livedocs.adobe.com/flex/201/html/charts_intro_108_12.html>  )
>> >> Here is the dataset I am trying to work with:
>> >>
>> >> <data>
>> >> <result month="Jan-04">
>> >> <apple>81768</apple>
>> >> <orange>60310</orange>
>> >> <banana>43357</banana>
>> >> </result>
>> >> <result month="Feb-04">
>> >> <apple>81156</apple>
>> >> <orange>58883</orange>
>> >> <banana>49280</banana>
>> >> </result>
>> >> </data>
>> >>
>> >> The flex code will look like this:
>> >> <mx:HTTPService
>> >> id="srv"
>> >> url="../assets/data.xml"
>> >> useProxy="false"
>> >> result="myData=ArrayCollection(srv.lastResult.data.result)"
>> >> />
>> >>
>> >> How can I interrogate the ArrayCollection named myData so that it
will
>> >> return apple, orange, and banana ?
>> >> I am not looking to get the numerical values, I want to get the
xml
>> >> name.
>> >>
>> >> -Thanks
>> >> Steve More
>> >
>> >
>
> 

 

 

Reply via email to