2009-03-12 19 views
0

ben işliyorum alındığında Sevk özel Olay bir FileReferenceList.fileList [] Bir kullanıcı aşağıdaki kodda seçer birden fazla dosya .. ben tutmaya checkImageDimensions içine i geçmesi gerekiyorFlex - Standart Olay

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);      
} 

hangi görüntünün izinin olduğu, kolayca özel bir etkinlik oluşturabilirim, ama doğru zamanda ateş etmek için buna ihtiyacım var. İdeal .. Böyle bir şey yapabileceğini

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

Ama dürüst olmak gerekirse, ben nasıl gerçekleştirecekleri konusunda emin değilim ...

kimse bana yardım edebilir? Teşekkürler!

cevap

2

Dinleyici işlevini yapmanız gerekir; işlev çağrısı yeterli olmaz. Bir sınıf adını dispatchEvent'a geçirmek de işe yaramıyor. İşte nasıl yapılacağı.

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

Olayda ihtiyacınız olan tek şey tipte bir dizeyse, özel bir etkinlik sınıfına ihtiyacınız olmayacağını unutmayın. Sadece bu durumda Etkinlik sınıfını kullanabilirsiniz:

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

Edit:

var evt:DynamicEvent = new DynamicEvent(MY_CUSTOM_EVENT); 
evt.attr1 = val1; 
evt.attr2 = val2; 
dispatchEvent(evt); 
: Gerçekten tembel, ama yine de olayla değerler geçirmek istiyorsanız, size DinamicEvent sınıfını kullanabilirsiniz

Elbette, kendi hata sınıfınızı bildirmek daha temiz ve daha az hatalıdır.

+0

Farklı bir sırayla yangın yapmaları durumunda, her farklı olayla birlikte bir tamsayı geçmem gerekiyor. Bunu ikinci yöntemle nasıl yapabilirim? Yine de ipucu için teşekkürler! – adam