Flash Builder 4:如何使组件等待事件?

时间:2010-11-14 15:52:21

标签: events actionscript components wait builder

这是我的问题。我在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事件。我怎么能这样做?


感谢您的回复,但是在preinitialize事件之后调用了applicationComplete事件,因此只会让事情变得更糟:

flexlib accessing image  
flexlib accessing image  
started loading
image converted

1 个答案:

答案 0 :(得分:0)

在WindowedApplication标签中,将preinitialize =“loadImage()”更改为applicationComplete =“loadImage()”