Зарегистрировать некоторые свойства в обработке событий

Я хочу показать несколько изображений для моего приложения

            sourceAudioFile =(event.target as File);
            sourceAudioFile.data;

            var myLoader:Loader = new Loader(); 
            var url :URLRequest = new URLRequest("file:///" + sourceAudioFile.nativePath);
            myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
            myLoader.load(url); 

Слушатель регистрации

private function onImageLoaded(e:Event):void 
{
            var image : Bitmap= new Bitmap(e.target.content.bitmapData);
            image.scaleX = 0.5 ; 
            image.scaleY = 0.5 ; 
}

Есть ли способ, с помощью которого я могу добавить некоторые пользовательские значения в Event.COMPLETE, чтобы узнать, какой тип изображения загружается.

как e.imageName, e.noOfImage, к которому я могу получить доступ в полном обработчике и предоставить ему значения при регистрации этого события.

заранее спасибо

3 ответа

Решение

Да, вы можете попробовать зарегистрировать событие как:

myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,function(e:Event){

  dispatchEvent(new CustomEvent(CustomEvent.COMPLETE, "<imageType>"));

}, false, 0, true);

И добавьте новый класс, расширяющий класс Event:

public class CustomEvent extends Event {

        public static const COMPLETE:String  = "CustomEventComplete";

        public var imageType:String = "";

        public function CustomEvent(type:String, imageType:String = "", bubbles:Boolean = false, cancelable:Boolean = false){

            super(type, bubbles, cancelable);

            this.imageType = imageType;
        }

        override public function clone():Event {

            return new CustomEvent(type, customTarget, bubbles, cancelable);
        }

    }

Теперь вы можете зарегистрироваться на CustomEvent.COMPLETE и получить тип изображения в слушателе.

Да, есть простой способ:

myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded(imageName, noOfImage));
myLoader.load(url);

function onImageLoaded(imageName:String, noOfImage:int):Function {
  return function(e:Event):void {
    // Respective "e", "imageName" and "noOfImage" are available for you here.
  }
}

Если вам нужно удалить его позже, измените первую строку на:

var functionOnImageLoaded:Function = onImageLoaded(imageName, noOfImage);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, functionOnImageLoaded);

А потом просто сделайте это так:

myLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, functionOnImageLoaded);

Я отвечал на это раньше. Смотрите это здесь.

Вы можете узнать, что было загружено, проверив свойство url LoaderInfo

private function onImageLoaded(e:Event):void 
{
var cli:LoaderInfo = e.target as LoaderInfo;//you added listener to the contentLoaderInfo property
    trace(cli.url);//url of the media being loaded
    //do something with it
}

также в этом вопросе вы можете получить более сложные ответы на вашу проблему:)

передать аргументы слушателю события

Другие вопросы по тегам