views:

1420

answers:

1

I am processing a FileReferenceList.fileList[] of multiple files a user selects in the following code..

for (i=0;i < event.currentTarget.fileList.length; i ++){
 fileByteData = new ByteArray();
 fileByteData = (event.currentTarget.fileList[i].data as ByteArray);             
 loader = new Loader();
 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, checkImageDimensions);
 loader.loadBytes(fileByteData);                 
}

I need to pass i into checkImageDimensions to keep track of which image is which, I can easily enough create a custom event, but I need this to fire at the right time. Ideally I could do something like this..

var myEvent:CustomEvent = new CustomEvent(i);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.dispatchEvent(CustomEvent))

But to be honest, I am unsure of how to proceed...

Can anyone help me out? Thanks!

+2  A: 

You need to make a listener function - a function call does not suffice. Passing a class name to dispatchEvent does not work either. Here's how to do it.

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
    dispatchEvent(new CustomEvent(i));
});

Note that you don't necessarily need a custom event class, if all you need in the event is a type string. You can simply use the Event class in this case:

public static const MY_CUSTOM_EVENT:String = "myCustomEvent";    
...
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
    dispatchEvent(new Event(MY_CUSTOM_EVENT));
});

Edit: If you're really lazy, but still want to pass values with the event, you can use the DinamicEvent class:

var evt:DynamicEvent = new DynamicEvent(MY_CUSTOM_EVENT);
evt.attr1 = val1;
evt.attr2 = val2;
dispatchEvent(evt);

Of course, it is cleaner and less error prone to declare your own error class.

David Hanak
I need to pass an integer along with every different event, in case they fire in a different order. I don't see how I can do this with your second method? Thanks for the hint though!
adam