0
我有一个DataGrid瓦特/自定义项目渲染,如下:IOErrorEvent ....我做错了什么?
<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图像随机出现,无论“文件”是否存在。我究竟做错了什么?
您设置的IOErrorEvent是实现它的方法,但在您的情况下,它不能按照您的方式工作。因此,要进行调试,您需要缩小可能会破坏脚本的区域。首先要做的是检查你是否真的加载了一个文件(哪个Event.Complete会为你确认),因为如果你认为你是,但你不是,那么这只是一个用户错误而不是代码错误。 – Aesphere 2010-11-12 12:59:20
这取决于,如果您在UIComponent上侦听creationComplete,但是您正在将数据加载到该UIComponent,那么creationComplete事件将在组件创建时触发,而不是在数据加载完成时触发。您将需要另一个事件侦听器来侦听何时将数据加载到数据obj/var中。如果数据存在,即在创建组件之前嵌入数据,那么data.File不应该为空。 – Aesphere 2010-11-14 09:37:33