2010-01-12 10 views
0

J'utilise Loader pour extraire les données d'image d'un ByteArray. Le problème est que j'ai besoin de stocker ces données d'image avec un nom (qui est connu à l'avance) une fois qu'il est passé au gestionnaire complet. Puisque l'opération est asynchrone, je ne peux pas être sûr quelle image de multiple finira par charger en premier, donc il semble que j'ai besoin de transmettre l'information avec ça ... Je n'arrive pas à trouver des propriétés de Loader qui passent informations vaguement utiles le long.Passage d'informations pour les fichiers avec chargeur

Des recommandations sur la façon dont je pourrais accomplir cela?

Répondre

1

Vous ne pouviez pas utiliser la propriété Loader.name?

var ldr:Loader = new Loader(); 
ldr.name = 'name_of_the_loader'; 
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderListener); 
ldr.loadBytes(aByteArray); 

... 

function loaderListener(event:Event):void { 
    trace('name of the completed loader is '+LoaderInfo(event.target).loader.name); 
} 

Pourriez-vous fournir du code?

+0

Oui, cela fonctionne. J'avais des problèmes avec ça hier, alors merci d'avoir éclairci ça. Marquer cela comme la meilleure solution pour l'instant car elle nécessite le moins de code. Merci. – grey

-2

loader.contentLoaderInfo.url aura l'URL de l'image chargée (par exemple http://sometURL/image1.jpg).

+0

Non si les données d'image proviennent d'un bytearray, comme les états op. – kkyy

+0

Comme indiqué, cela ne fonctionne pas dans ce cas, et la propriété URL est en lecture seule. – grey

0
private var loaders:Array = []; 
private var names:Array = []; 

    //inside loadImages method 
    for(i = 0; i < len; i++) 
    { 
     var ldr:Loader = new Loader(); 
     //add listeners and call load 
     loaders.push(ldr) 
     names.push(name-of-ith-image); 
    } 

private function onLoadComplete(e:Event):void 
{ 
    var index:Number = loaders.indexOf(LoaderInfo(e.target).loader); 
    var requiredName:String = names[index]; 
    trace(requiredName); 
} 
+0

Cela devrait fonctionner aussi. – grey

0

La première solution consisterait à utiliser un dictionnaire pour mapper les instances de Loader aux noms. Comme ceci:

private var names : Dictionary = new Dictionary(); 
... 

var ldr : Loader = new Loader(); 
names [ ldr ] = 'someName'; 
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderListener); 
ldr.loadBytes(aByteArray); 

... 

function loaderListener(event:Event):void { 
    trace('name of the completed loader is '+ names[ event.target ]); 
} 

L'autre solution serait d'utiliser un foncteur, comme ceci:

var ldr : Loader = new Loader(); 
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, createListener('someName')); 
ldr.loadBytes(aByteArray); 

... 

function createListener(imgName : String) : Function { 
    return function (event : Event) : void { 
     trace('name of the completed loader is '+ imgName); 
    } 
} 
+0

Des solutions intelligentes, merci. – grey