Flash Builder 4: как заставить компонент ждать события? - PullRequest
0 голосов
/ 14 ноября 2010

Вот моя проблема. У меня есть оконное приложение во Flash Builder с некоторым кодом, а затем с изображением.

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       xmlns:flexlib="http://code.google.com/p/flexlib/" preinitialize="loadImage()">
    <fx:Script><![CDATA[
        import flash.display.BitmapData;
    import flash.utils.ByteArray;

    import mx.controls.Image;
    import mx.core.UIComponent;
    import mx.graphics.codec.JPEGEncoder;
    import mx.utils.Base64Encoder;

    private var image:Bitmap;
    private var base64image:String="";
    private var sleepInt:int;

    private function loadImage():void
    {
        var loader:Loader = new Loader;
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
        loader.load(new URLRequest("mypic.jpg"));
        trace("started loading");
    }
    private function getimg():String
    {
        trace("flexlib accessing image ", base64image);
        return base64image;
    }
        private function imageLoaded(event:Event):void
    {
        image = new Bitmap(event.target.content.bitmapData);
        base64image = getBase64FromComponent(image);
        trace("image converted");
    }


    ]]></fx:Script>

    <flexlib:Base64Image value="{getimg()}"/>
</s:WindowedApplication>

Тег flexlib должен отображать изображение из строки. Я хочу загрузить изображение в код ActionScript, преобразовать его в строку, а затем нарисовать его. Однако, как только приложение запускается, оно пытается отобразить строку, которая все еще пуста.

Трассировка такая, по какой-то причине getimg () вызывается дважды: доступ к изображению flexlib
начал загружаться flexlib доступ к изображению
преобразованное изображение

Как видите, изображение не преобразуется до тех пор, пока flexlib не попытается его нарисовать. Решением было бы заставить компонент flexlib ждать события imageLoaded. Как я могу это сделать?


Спасибо, что ответили, однако событие applicationComplete вызывается после события preinitialize и, таким образом, только ухудшает ситуацию:

flexlib accessing image  
flexlib accessing image  
started loading
image converted

1 Ответ

0 голосов
/ 15 ноября 2010

В теге WindowedApplication измените preinitialize = "loadImage ()" на applicationComplete = "loadImage ()"

...