BatchLoader pro textové soubory
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ě:
//instance objektu var bLoader:BatchLoader = new BatchLoader(pole_souboru); //načtení souborů z předaného pole bLoader.load(); //doplnění listenerů bLoader.addEventListener(BatchEvent.ALL_COMPLETE,loadCompl); bLoader.addEventListener(BatchEvent.IO_ERROR,err); function loadCompl(evt:Event):void{ var pole_nactenych:Array = bLoader.getLoadedArray(); }
Jednoduchou třídu, která toto splňuje nalezneme v detailu článku.
BatchLoader.as
package cls { import cls.myEvents.BatchEvent; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLRequest; [Event(name="allComplete", type="cls.myEvents.BatchEvent")] [Event(name="subComplete", type="cls.myEvents.BatchEvent")] [Event(name="ioError", type="cls.myEvents.BatchEvent")] public class BatchLoader extends EventDispatcher{ private var evtDispatch:EventDispatcher; //loader private var myLoader:URLLoader; //pole zdrojových souborů k načtení private var sourceArr:Array; //pole načtených dat private var finalArr:Array; //nastavení, který prvek bude brán z pole první private var firstOut:Boolean; public function BatchLoader(src:Array,fo:Boolean=true){ sourceArr = src; firstOut = fo; myLoader = new URLLoader(); } public function load():void{ finalArr = new Array(); myLoader.addEventListener(Event.COMPLETE,loaded); myLoader.addEventListener(IOErrorEvent.IO_ERROR,err); loadNextItem(); } private function loaded(evt:Event):void{ finalArr.push(myLoader.data); if(sourceArr.length>0){ dispatchEvent(new BatchEvent(BatchEvent.SUB_COMPLETE)); loadNextItem(); }else{ dispatchEvent(new BatchEvent(BatchEvent.ALL_COMPLETE)); } } private function err(evt:Event):void{ sendMsg("Chyba načítání"); dispatchEvent(new BatchEvent(BatchEvent.IO_ERROR)); if(sourceArr.length>0){ loadNextItem(); } } private function loadNextItem():void{ if(sourceArr.length>0){ var src:String=""; if(firstOut){ src = sourceArr.shift(); }else{ src = sourceArr.pop(); } var req:URLRequest = new URLRequest(src); myLoader.load(req); }else{ sendMsg("Pole neobsahuje žádné prvky"); } } private function sendMsg(str:String):void{ trace(str); } public function getLoadedArray():Array{ return finalArr; } } }
BatchEvent.as
package cls.myEvents { import flash.events.Event; public class BatchEvent extends Event { public static const ALL_COMPLETE:String = "allComplete"; public static const SUB_COMPLETE:String = "subComplete"; public static const IO_ERROR:String = "ioError"; public function BatchEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false){ super(type, bubbles, cancelable); } override public function clone():Event { return new BatchEvent(type); } } }
Duben 10th, 2009 at 22.23
Sikovna (podobna) vec je tohle:
http://code.google.com/p/vanrijkom-flashlibs/
Duben 11th, 2009 at 9.34
díky, dobrej tip ;-)