public class SingleListener {
public static function wrap(target: IEventDispatcher, eventName: String, callback: Function): void
{
var listener: Function = function (event: Event): void
{
try {
callback.call(event.currentTarget, event);
} finally {
target.removeEventListener(eventName, listener);
}
}
target.addEventListener(eventName, listener);
}
}
Пример
[Embed(source="/res/image.png")]
[Bandable]
private var _imageSource: Class;
private var _image: Image = new Image();
override protected function createChildren(): void
{
super.createChildren();
addChild(_image);
_image.source = _imageSource;
workWithImageSize(_image.width, _image.height)
}
private function workWithImageSize(width: Number, height: Number): void
{
trace(width + "x" + height);
}
Output:
0x0
Но на самом деле картинка "/res/image.png" имеет размеры 640x480. Т.е. реальные данные о размере картинки мы получим после первого изменения размеров объекта _image.
override protected function createChildren(): void
{
super.createChildren();
addChild(_image);
_image.source = _imageSource;
//use this strut
SingleListener.wrap(_image, ResizeEvent.RESIZE,
function (event: Event): void
{
workWithImageSize(_image.width, _image.height);
});
}
Output:
640x480
Если после каждого изменения source требуется обработать размеры картинки, можно поступить так.
override protected function createChildren(): void
{
super.createChildren();
addChild(_image);
_image.addEventListener("sourceChanged", doOnSourceChanged );
_image.source = _imageSource;
}
private fucntion doOnSourceChanged(event: Event): void
{
//use this strut here
SingleListener.wrap(_image, ResizeEvent.RESIZE,
function (event: Event): void
{
workWithImageSize(_image.width, _image.height);
});
}