Вы можете использовать event.currentTarget
внутри прослушивателя событий, чтобы получить ссылку на объект, который зарегистрировал прослушиватель событий.
private function localFunc():void
{
var btn:Button = new Button();
btn.addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(e:MouseEvent):void
{
//e.currentTarget is typed as Object: in order to assign it to a
//variable of type Button, you must cast it accordingly.
var btn:Button = Button(e.currentTarget);
}
В случае событий загрузчика currentTarget
будет ассоциированным объектом LoaderInfo
.LoaderInfo имеет свойство loader
, которое указывает на исходный объект Loader
.
private function tilesLoadInit(e:Event):void
{
var linfo:LoaderInfo = LoaderInfo(e.target);
var ldr:Loader = linfo.loader;//this is the Loader you wanted
}
Свойства target
и currentTarget
будут одинаковыми в событиях LoaderInfo, но могут отличаться в кнопках и другихотображать объекты.Например, когда вы добавляете прослушиватель событий нажатия кнопки и щелкаете текстовое поле, являющееся дочерним элементом кнопки, event.target
будет текстовым полем, а event.currentTarget
будет кнопкой.По сути, target
будет содержать точный объект, который вызвал событие, а currentTarget
будет объектом, с которым был зарегистрирован текущий исполняющий прослушиватель событий.
Что касается сборки мусора, у вас естьудалить прослушиватель событий из соответствующего объекта, прежде чем сборщик мусора сможет его смести.Или вы можете использовать слабые ссылки при добавлении прослушивателя событий, установив пятый параметр true
в методе addEventListener .Сборщик мусора не считает слабые ссылки при проверке, подходит ли объект для сборки мусора.
Но если вы используете слабую ссылку для локальной переменной, объект может получить GC, как только он выйдет из области видимости(то есть, когда метод возвращается), если у него больше нет ссылок на него, и слушатель события может вообще не вызываться: это не проблема с кнопками, так как вы добавили бы их в список отображения перед возвратом,таким образом создавая сильную ссылку на него.
Используйте Event.COMPLETE
вместо Event.INIT
для чтения содержимого.С aliveocs :
complete
- Отправляется связанным объектом LoaderInfo
, когда файл завершил загрузку.
init
- Отправляетсясвязанный объект LoaderInfo
, когда доступны свойства и методы загруженного SWF-файла.Событию init
всегда предшествует событие complete
.