IOErrorEvent .... что я делаю не так? - PullRequest
0 голосов
/ 12 ноября 2010

У меня есть сетка данных с средством визуализации пользовательских элементов, как показано ниже:

<mx:AdvancedDataGridColumn dataField="file">
<mx:itemRenderer>
<fx:Component>
<mx:HBox paddingLeft="2">
<fx:Script>
<![CDATA[

import mx.core.BitmapAsset;
[Embed(source="components/download.png")]
[Bindable]
public var imgCls:Class;

public function IOErrorEventExample():void {
var loader:URLLoader = new URLLoader();
loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
var request:URLRequest=new URLRequest("http://www.site.com/"+data.file);
loader.load(request);
}

private function ioErrorHandler(event:IOErrorEvent):void {
if ( String(event) != null ){
// load the itemrenderer image here if the file exists on our server
var imgObj:BitmapAsset = new imgCls() as BitmapAsset;
myImage.source=imgObj;

}
else {
// don't load the itemrenderer image if the file doesn't exist yet
}}                                      
]]>
</fx:Script>
<mx:Image id="myImage" creationComplete="IOErrorEventExample();"/>
</mx:HBox>
</fx:Component>
</mx:itemRenderer>
</mx:AdvancedDataGridColumn>

Итак, если у меня есть фактический файл на моем сервере, я хочу отобразить изображение download.png ... однакоКогда я компилирую и запускаю приведенный выше код, изображение .png появляется случайным образом, независимо от того, существует ли «файл».Что я делаю не так?

1 Ответ

1 голос
/ 12 ноября 2010

Вам необходимо закрыть функцию ioErrorHandler, добавив одну последнюю фигурную скобку перед закрытием тега CDATA

Не могу точно сказать, что это решит проблему, хотя логика выглядит правильно.Вы можете попробовать добавить прослушиватель событий Event.COMPLETE, чтобы действительно убедиться, что файл существует и загружается.

РЕДАКТИРОВАТЬ:Вы можете сократить эту функцию обработчика событий только до этого, потому что:1. Эта функция вызывается только при отправке IOErrorEvent, поэтому при вызове всегда будет присутствовать объект события.(Оператор if не нужен)2. Даже если вы оставили оператор if внутри, нет необходимости вызывать оператор else, поскольку в случае, если файл существует, эта функция вызываться не будет.

private function ioErrorHandler(event:IOErrorEvent):void 
{
    var imgObj:BitmapAsset = new imgCls() as BitmapAsset;
    myImage.source=imgObj;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...