Re: [Flashcoders] how to return in this function
Claudio M. E. Bastos Iorio ha scritto: Hi guys, hope you can help me on this one. I have a class to load an XML file. I'm trying this: As Eric said, remember that the Event class is your friend. You will want to manage any asynchronous procedure (such as Remoting, XML parsing, NetConnection responders and millions of other features) by launching and listening to a couple of Events. ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
RE: [Flashcoders] how to return in this function
Thank you guys, now I have a clearer point of view. Your responses and this thread http://www.actionscript.org/forums/showthread.php3?t=159167 helped me a lot. Have a nice day! Claudio M. E. Bastos Iorio http://www.blumer.com.ar -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Juan Pablo Califano Sent: Tuesday, January 29, 2008 10:37 PM To: Flash Coders List Subject: Re: [Flashcoders] how to return in this function var mivariable:retornaXML = new retornaXML(); trace(mivariable.elXML); but this trace returns null, since the xml file (I think) is not loaded yet. Yes, that's the problem. In Flash, xml loading is always asynchronous so the trace line is executed immediately after the previous one, in which you created an instance of retornaXML; so the XML object isn't at that point loaded and parsed. (It would perhaps be nice to have the option of loading synchronously, but I digress...). So, you'll have to listen to the COMPLETE event dispatched by the URLLoader and then access the xml object. You can wrap your xml and the loading logic in a custom class as you seem to be doing so far, but if you're just going to load the xml and the read it / parse it somewhere else (outside that class), in my humble opinion, the wrapper is pointless. You'll end up re-dispatching the Loader events (all the events you want to support; the error events, and the complete event, at least, just in case something went wrong, and perhaps the Progress event as well) so your external code can handle the different scenarios. By the time you are done coding that, you'll find that you have a class that does almost nothing of use by itself; it just copies all the functionality that you already had in the URLLoader and XML classes out of the box. I did it a couple of times when I started to use AS 3.0, but I changed my approach as it didn't make much sense to me to have such a class. Having all that logic encapsulated in the class that actually does something with the xml, on the other hand, seems like a good idea to me. Cheers Juan Pablo Califano - Original Message - From: Hans Wichman [EMAIL PROTECTED] To: Flash Coders List flashcoders@chattyfig.figleaf.com Sent: Tuesday, January 29, 2008 7:30 PM Subject: Re: [Flashcoders] how to return in this function seems like an item for the newbie list tbh:) On Tue, Jan 29, 2008 at 8:27 PM, Claudio M. E. Bastos Iorio [EMAIL PROTECTED] wrote: Thanks for your answer. But how? Where?. I think that ProgressEvent.bytesLoaded, and ProgressEvent.bytesTotal could help. But where should I check the status? Claudio M. E. Bastos Iorio http://www.blumer.com.ar -Original Message- From: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED] On Behalf Of eric e. dolecki Sent: Tuesday, January 29, 2008 4:07 PM To: Flash Coders List Subject: Re: [Flashcoders] how to return in this function you could use an event to listen to, to pass the XML out of the class. On Jan 29, 2008 1:42 PM, Claudio M. E. Bastos Iorio [EMAIL PROTECTED] wrote: Hi guys, hope you can help me on this one. I have a class to load an XML file. I'm trying this: package { import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.*; public class retornaXML{ private var _xml:XML; public function retornaXML() { cargarXML(); } private function cargarXML():void { var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, xmlLoaded); loader.load(new URLRequest(LocalData.xml)); } private function xmlLoaded(e:Event):void { _xml = new XML(e.target.data); trace(_xml); //THE TRACE HERE WORKS PERFECT AND RETURNS THE XML } public function get elXML():XML { return _xml; //THIS RETURNS null } } } I want something like this: var mivariable:retornaXML = new retornaXML(); trace(mivariable.elXML); but this trace returns null, since the xml file (I think) is not loaded yet. What should I do? Thanks in advance. Claudio M. E. Bastos Iorio http://www.blumer.com.ar/ http://www.blumer.com.ar ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
RE: [Flashcoders] how to return in this function
Thanks for your answer. But how? Where?. I think that ProgressEvent.bytesLoaded, and ProgressEvent.bytesTotal could help. But where should I check the status? Claudio M. E. Bastos Iorio http://www.blumer.com.ar -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of eric e. dolecki Sent: Tuesday, January 29, 2008 4:07 PM To: Flash Coders List Subject: Re: [Flashcoders] how to return in this function you could use an event to listen to, to pass the XML out of the class. On Jan 29, 2008 1:42 PM, Claudio M. E. Bastos Iorio [EMAIL PROTECTED] wrote: Hi guys, hope you can help me on this one. I have a class to load an XML file. I'm trying this: package { import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.*; public class retornaXML{ private var _xml:XML; public function retornaXML() { cargarXML(); } private function cargarXML():void { var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, xmlLoaded); loader.load(new URLRequest(LocalData.xml)); } private function xmlLoaded(e:Event):void { _xml = new XML(e.target.data); trace(_xml); //THE TRACE HERE WORKS PERFECT AND RETURNS THE XML } public function get elXML():XML { return _xml; //THIS RETURNS null } } } I want something like this: var mivariable:retornaXML = new retornaXML(); trace(mivariable.elXML); but this trace returns null, since the xml file (I think) is not loaded yet. What should I do? Thanks in advance. Claudio M. E. Bastos Iorio http://www.blumer.com.ar/ http://www.blumer.com.ar ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Re: [Flashcoders] how to return in this function
you could use an event to listen to, to pass the XML out of the class. On Jan 29, 2008 1:42 PM, Claudio M. E. Bastos Iorio [EMAIL PROTECTED] wrote: Hi guys, hope you can help me on this one. I have a class to load an XML file. I'm trying this: package { import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.*; public class retornaXML{ private var _xml:XML; public function retornaXML() { cargarXML(); } private function cargarXML():void { var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, xmlLoaded); loader.load(new URLRequest(LocalData.xml)); } private function xmlLoaded(e:Event):void { _xml = new XML(e.target.data); trace(_xml); //THE TRACE HERE WORKS PERFECT AND RETURNS THE XML } public function get elXML():XML { return _xml; //THIS RETURNS null } } } I want something like this: var mivariable:retornaXML = new retornaXML(); trace(mivariable.elXML); but this trace returns null, since the xml file (I think) is not loaded yet. What should I do? Thanks in advance. Claudio M. E. Bastos Iorio http://www.blumer.com.ar/ http://www.blumer.com.ar ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Re: [Flashcoders] how to return in this function
seems like an item for the newbie list tbh:) On Tue, Jan 29, 2008 at 8:27 PM, Claudio M. E. Bastos Iorio [EMAIL PROTECTED] wrote: Thanks for your answer. But how? Where?. I think that ProgressEvent.bytesLoaded, and ProgressEvent.bytesTotal could help. But where should I check the status? Claudio M. E. Bastos Iorio http://www.blumer.com.ar -Original Message- From: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED] On Behalf Of eric e. dolecki Sent: Tuesday, January 29, 2008 4:07 PM To: Flash Coders List Subject: Re: [Flashcoders] how to return in this function you could use an event to listen to, to pass the XML out of the class. On Jan 29, 2008 1:42 PM, Claudio M. E. Bastos Iorio [EMAIL PROTECTED] wrote: Hi guys, hope you can help me on this one. I have a class to load an XML file. I'm trying this: package { import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.*; public class retornaXML{ private var _xml:XML; public function retornaXML() { cargarXML(); } private function cargarXML():void { var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, xmlLoaded); loader.load(new URLRequest(LocalData.xml)); } private function xmlLoaded(e:Event):void { _xml = new XML(e.target.data); trace(_xml); //THE TRACE HERE WORKS PERFECT AND RETURNS THE XML } public function get elXML():XML { return _xml; //THIS RETURNS null } } } I want something like this: var mivariable:retornaXML = new retornaXML(); trace(mivariable.elXML); but this trace returns null, since the xml file (I think) is not loaded yet. What should I do? Thanks in advance. Claudio M. E. Bastos Iorio http://www.blumer.com.ar/ http://www.blumer.com.ar ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Re: [Flashcoders] how to return in this function
var mivariable:retornaXML = new retornaXML(); trace(mivariable.elXML); but this trace returns null, since the xml file (I think) is not loaded yet. Yes, that's the problem. In Flash, xml loading is always asynchronous so the trace line is executed immediately after the previous one, in which you created an instance of retornaXML; so the XML object isn't at that point loaded and parsed. (It would perhaps be nice to have the option of loading synchronously, but I digress...). So, you'll have to listen to the COMPLETE event dispatched by the URLLoader and then access the xml object. You can wrap your xml and the loading logic in a custom class as you seem to be doing so far, but if you're just going to load the xml and the read it / parse it somewhere else (outside that class), in my humble opinion, the wrapper is pointless. You'll end up re-dispatching the Loader events (all the events you want to support; the error events, and the complete event, at least, just in case something went wrong, and perhaps the Progress event as well) so your external code can handle the different scenarios. By the time you are done coding that, you'll find that you have a class that does almost nothing of use by itself; it just copies all the functionality that you already had in the URLLoader and XML classes out of the box. I did it a couple of times when I started to use AS 3.0, but I changed my approach as it didn't make much sense to me to have such a class. Having all that logic encapsulated in the class that actually does something with the xml, on the other hand, seems like a good idea to me. Cheers Juan Pablo Califano - Original Message - From: Hans Wichman [EMAIL PROTECTED] To: Flash Coders List flashcoders@chattyfig.figleaf.com Sent: Tuesday, January 29, 2008 7:30 PM Subject: Re: [Flashcoders] how to return in this function seems like an item for the newbie list tbh:) On Tue, Jan 29, 2008 at 8:27 PM, Claudio M. E. Bastos Iorio [EMAIL PROTECTED] wrote: Thanks for your answer. But how? Where?. I think that ProgressEvent.bytesLoaded, and ProgressEvent.bytesTotal could help. But where should I check the status? Claudio M. E. Bastos Iorio http://www.blumer.com.ar -Original Message- From: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED] On Behalf Of eric e. dolecki Sent: Tuesday, January 29, 2008 4:07 PM To: Flash Coders List Subject: Re: [Flashcoders] how to return in this function you could use an event to listen to, to pass the XML out of the class. On Jan 29, 2008 1:42 PM, Claudio M. E. Bastos Iorio [EMAIL PROTECTED] wrote: Hi guys, hope you can help me on this one. I have a class to load an XML file. I'm trying this: package { import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.*; public class retornaXML{ private var _xml:XML; public function retornaXML() { cargarXML(); } private function cargarXML():void { var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, xmlLoaded); loader.load(new URLRequest(LocalData.xml)); } private function xmlLoaded(e:Event):void { _xml = new XML(e.target.data); trace(_xml); //THE TRACE HERE WORKS PERFECT AND RETURNS THE XML } public function get elXML():XML { return _xml; //THIS RETURNS null } } } I want something like this: var mivariable:retornaXML = new retornaXML(); trace(mivariable.elXML); but this trace returns null, since the xml file (I think) is not loaded yet. What should I do? Thanks in advance. Claudio M. E. Bastos Iorio http://www.blumer.com.ar/ http://www.blumer.com.ar ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders ___ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders