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] >