Poměrně často se setkávám s nutností stahování většího množství souborů najednou, jehož řešením je postupné načítání souborů jeden po druhém. Bylo by tedy určitě dobré mít nějakou třídu, která se o načtení souborů postará například v této podobě:

  1. //instance objektu
  2. var bLoader:BatchLoader = new BatchLoader(pole_souboru);
  3. //načtení souborů z předaného pole
  4. bLoader.load();
  5. //doplnění listenerů
  6. bLoader.addEventListener(BatchEvent.ALL_COMPLETE,loadCompl);
  7. bLoader.addEventListener(BatchEvent.IO_ERROR,err);
  8. function loadCompl(evt:Event):void{
  9.   var pole_nactenych:Array = bLoader.getLoadedArray();
  10. }

Jednoduchou třídu, která toto splňuje nalezneme v detailu článku.

BatchLoader.as

  1. package cls
  2. {
  3. import cls.myEvents.BatchEvent;
  4. import flash.events.Event;
  5. import flash.events.EventDispatcher;
  6. import flash.events.IOErrorEvent;
  7. import flash.net.URLLoader;
  8. import flash.net.URLRequest;
  9.  
  10. [Event(name="allComplete", type="cls.myEvents.BatchEvent")]
  11. [Event(name="subComplete", type="cls.myEvents.BatchEvent")]
  12. [Event(name="ioError", type="cls.myEvents.BatchEvent")]
  13.  
  14. public class BatchLoader extends EventDispatcher{
  15.  
  16. private var evtDispatch:EventDispatcher;
  17. //loader
  18. private var myLoader:URLLoader;
  19. //pole zdrojových souborů k načtení
  20. private var sourceArr:Array;
  21. //pole načtených dat
  22. private var finalArr:Array;
  23. //nastavení, který prvek bude brán z pole první
  24. private var firstOut:Boolean;
  25.  
  26. public function BatchLoader(src:Array,fo:Boolean=true){
  27. sourceArr = src;
  28. firstOut = fo;
  29. myLoader = new URLLoader();
  30. }
  31.  
  32. public function load():void{
  33. finalArr = new Array();
  34. myLoader.addEventListener(Event.COMPLETE,loaded);
  35. myLoader.addEventListener(IOErrorEvent.IO_ERROR,err);
  36. loadNextItem();
  37. }
  38.  
  39. private function loaded(evt:Event):void{
  40. finalArr.push(myLoader.data);
  41. if(sourceArr.length>0){
  42. dispatchEvent(new BatchEvent(BatchEvent.SUB_COMPLETE));
  43. loadNextItem();
  44. }else{
  45. dispatchEvent(new BatchEvent(BatchEvent.ALL_COMPLETE));
  46. }
  47. }
  48.  
  49. private function err(evt:Event):void{
  50. sendMsg("Chyba načítání");
  51. dispatchEvent(new BatchEvent(BatchEvent.IO_ERROR));
  52. if(sourceArr.length>0){
  53. loadNextItem();
  54. }
  55. }
  56.  
  57. private function loadNextItem():void{
  58. if(sourceArr.length>0){
  59. var src:String="";
  60. if(firstOut){
  61. src = sourceArr.shift();
  62. }else{
  63. src = sourceArr.pop();
  64. }
  65. var req:URLRequest = new URLRequest(src);
  66. myLoader.load(req);
  67. }else{
  68. sendMsg("Pole neobsahuje žádné prvky");
  69. }
  70. }
  71.  
  72. private function sendMsg(str:String):void{
  73. trace(str);
  74. }
  75.  
  76. public function getLoadedArray():Array{
  77. return finalArr;
  78. }
  79. }
  80. }

BatchEvent.as

  1. package cls.myEvents
  2. {
  3. import flash.events.Event;
  4.  
  5. public class BatchEvent extends Event {
  6.  
  7. public static const ALL_COMPLETE:String = "allComplete";
  8. public static const SUB_COMPLETE:String = "subComplete";
  9. public static const IO_ERROR:String = "ioError";
  10.  
  11. public function BatchEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false){
  12. super(type, bubbles, cancelable);
  13. }
  14.  
  15. override public function clone():Event {
  16. return new BatchEvent(type);
  17. }
  18. }
  19. }