If you are going to do this, make an ArrayCollection, you should build a
class(value object, VO) with strongly typed public properties.

 

In the loop, "new" that class, then assign the xml node property values
to the appropriate value object properties.  Push that VO onto a
temporary array.  When the loop is done, wrap the array in an
ArrayCollection.

 

Tracy

 

________________________________

From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of sdl1326
Sent: Thursday, July 10, 2008 6:25 PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Re: Putting returned xml data into ArrayCollection
using Cairngorm framwork (Command Class/Delegate Class/IResponder)

 

Ok, thanks.

So, looking at the original xml file ( below) if I want to add both
the name and url (data) to the array collection, is this the most
efficient way to accomplish this?

var xmlResult:XML = new XML(event.result);
xmlImages_ac = new ArrayCollection();

// push XML to ArrayCollection
for each(var item:XML in xmlResult.image){
var obj:Object = new Object()
obj.url = [EMAIL PROTECTED];
obj.name = [EMAIL PROTECTED];
xmlImages_ac.addItem(obj);
}

TIA

--- In flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
, "Josh McDonald" <[EMAIL PROTECTED]> wrote:
>
> That's right, because when you trace the ArrayCollection it converts
its
> children to String, and your nodes have no inner text, so they
toString() as
> "".
> 
> Instead of "addItem(item)", try "addItem([EMAIL PROTECTED])"
> 
> -Josh
> 
> On Fri, Jul 11, 2008 at 6:57 AM, sdl1326 <[EMAIL PROTECTED]> wrote:
> 
> > Tracy, thanks for the very detailed reply. I changed the
resultFormat=
> > 'e4x'. So, I want to put the xml data into an arraycollection and am
> > trying the following code:
> >
> > var xmlResult:XML = new XML(event.result);
> >
> > xmlImages_ac = new ArrayCollection();
> >
> > // push XML to ArrayCollection
> > for each(var item:XML in xmlResult.image){
> >
> > xmlImages_ac.addItem(item);
> > }
> >
> > trace('xmlImages_ac - ' + xmlImages_ac)
> >
> > For whatever reason, I can not seem to get this to work as it simply
> > traces out:
> >
> > xmlImages_ac - ,,,,
> >
> > Can you point to where I am getting tripped up?
> >
> > Thanks for the assistance.
> >
> > --- In flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> , "Tracy Spratt" <tspratt@> wrote:
> > >
> > > You have found one reason not to use resultFormat="object". 
That result
> > > format causes flex to convert your result data, which is xml, into
a
> > > tree of dynamic objects. You have no control over this
process(, and it
> > > has some issues, particularly that values that look like
numbers are
> > > converted to numbers) and it is even hard to predict. It is
also hard
> > > to debug, though you can use ObjUtil.toString() to see the
contents.
> > >
> > >
> > >
> > > What is happening in your case is the "images" node becomes an
object
> > > containing an Array or "image" nodes. So this expression:
> > >
> > > result.images.image returns an Array, which you can directly
wrap in an
> > > ArrayCollection. I would not expect the direct assignment to
work like
> > > you show it, and doing it that way hides what is really
happening. This
> > > is more clear:
> > >
> > > var aResult:Array = ResultEvent( data ).result.images.image;
> > >
> > > trace(aResult.length); //is this what you expect
> > >
> > > var acImages:ArrayCollection = new ArrayCollection(aResult);
> > >
> > >
> > >
> > > Since an Array is an object, Josh's suggestion to use a for..in
loop
> > > would work also.
> > >
> > >
> > >
> > > I advise using resultFormat="e4x". This leaves your result data
as XML,
> > > so you can do:
> > >
> > > var xmlResult:XML = XML(ResultEvent( data ).result);
> > >
> > > trace(xmlResult.toXMLSTring()); //you will see your xml,
unchanged.
> > >
> > >
> > >
> > > Now, you can use the xml directly, or use XMLList, or
XMLListCollection,
> > > or combinations of the three.
> > >
> > >
> > >
> > > Or, if you want, you can convert your xml, or parts thereof, into
> > > ArrayCollections.
> > >
> > >
> > >
> > > Tracy
> > >
> > >
> > >
> > > ________________________________
> > >
> > > From: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
[mailto:flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
] On
> > > Behalf Of sdl1326
> > > Sent: Thursday, July 10, 2008 12:16 PM
> > > To: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> > > Subject: [flexcoders] Re: Putting returned xml data into
ArrayCollection
> > > using Cairngorm framwork (Command Class/Delegate Class/IResponder)
> > >
> > >
> > >
> > > Here's a sample xml that's getting loaded in via http service:
> > >
> > > <images duration="3000" effect="Fade" startDelay="2000">
> > > <image name="image.jpg" url="http://www.cnn.com
<http://www.cnn.com> 
<http://www.cnn.com <http://www.cnn.com> > "/>
> > > <image name="image1.jpg" url="http://www.usatoday.com
<http://www.usatoday.com> 
> > > <http://www.usatoday.com <http://www.usatoday.com> > " />
> > > <image name="image2.jpg" url="http://www.msnbc.com
<http://www.msnbc.com> 
> > > <http://www.msnbc.com <http://www.msnbc.com> > " />
> > > <image name="image3.jpg" url="http://www.digg.com
<http://www.digg.com> 
<http://www.digg.com <http://www.digg.com> >
> > > " />
> > > <image name="image4.jpg" url="http://www.google.com
<http://www.google.com> 
> > > <http://www.google.com <http://www.google.com> > " />
> > > </images>
> > >
> > > If I change the code in the result handler to:
> > >
> > > var ac:ArrayCollection = ResultEvent( data ).result.images.image
> > >
> > > Then I have no issues putting it directly into an array
collection.
> > > It's only when I remove the (.image) and have the following:
> > >
> > > var ac:ArrayCollection = ResultEvent( data ).result.images
> > >
> > > Is when I get the coercion error. Is there any reason why I
shouldn't
> > > continue to put the data in an array collection via the 1st
method?
> > >
> > > TIA
> > >
> > > --- In flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
<mailto:flexcoders%40yahoogroups.com<flexcoders%2540yahoogroups.com>
> > >
> > > , "Josh McDonald" <dznuts@> wrote:
> > > >
> > > > You're getting an ObjectProxy because you're using the
"object" result
> > > > format. To convert to ArrayCollection:
> > > >
> > > > var myArray:Array = [];
> > > > for each (var img:* in result.images)
> > > > {
> > > > myArray.pish(img);
> > > > }
> > > >
> > > > myCollection = new ArrayCollection(myArray);
> > > >
> > > > -Josh
> > > >
> > > > On Thu, Jul 10, 2008 at 1:31 PM, sdl1326 <azsl1326-email@>
wrote:
> > > >
> > > > > Thanks for the assistance.
> > > > >
> > > > > I have left the resultformat blank (feel free to share why I
> > > shouldn't
> > > > > do this as I am always looking for best practices/advice).
> > > However,in
> > > > > previous projects, I have taken the return data from an http
service
> > > > > and immediately put it in an arraycollection in the
resulthandler. I
> > > > > just assumed the same could be done here when using
Cairngorm, but
> > > > > apparently something isn't correct. I tried your suggestion
below
> > > and
> > > > > am still receiving an error:
> > > > >
> > > > > TypeError: Error #1034: Type Coercion failed: cannot convert
> > > > > mx.utils::[EMAIL PROTECTED] to Array.
> > > > >
> > > > > Thanks in advance.
> > > > >
> > > > >
> > > > >
> > > >
> > > > --
> > > > "Therefore, send not to know For whom the bell tolls. It tolls
for
> > > thee."
> > > >
> > > > :: Josh 'G-Funk' McDonald
> > > > :: 0437 221 380 :: josh@
> > > >
> > >
> >
> >
> >
> > ------------------------------------
> >
> > --
> > Flexcoders Mailing List
> > FAQ:
http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
<http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt> 
> > Search Archives:
> > http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo
<http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo> ! Groups
> > Links
> >
> >
> >
> >
> 
> 
> -- 
> "Therefore, send not to know For whom the bell tolls. It tolls for
thee."
> 
> :: Josh 'G-Funk' McDonald
> :: 0437 221 380 :: [EMAIL PROTECTED]
>

 

Reply via email to