, 당신은 IO 오류를 보호 로더 인스턴스에 이벤트 리스너를 추가하고 처리해야합니다. 여기
package
{
import fl.controls.listClasses.ICellRenderer;
import fl.controls.listClasses.ImageCell;
import fl.controls.TileList;
import fl.data.DataProvider;
import fl.managers.StyleManager;
import flash.events.EventDispatcher;
import flash.events.*;
import fl.containers.UILoader;
public class CustomImageCell extends ImageCell implements ICellRenderer
{
public function CustomImageCell()
{
super();
//do other stuff here
loader.scaleContent = false;
loader.addEventListener(IOErrorEvent.IO_ERROR, handleErrorEvent, false, 0, true);
useHandCursor = true;
}
override protected function drawLayout():void
{
var imagePadding:Number = getStyleValue("imagePadding") as Number;
loader.move(11, 5);
var w:Number = width-(imagePadding*2);
var h:Number = height-imagePadding*2;
if (loader.width != w && loader.height != h)
{
loader.setSize(w,h);
}
loader.drawNow(); // Force validation!
}
override protected function handleErrorEvent(event:IOErrorEvent):void {
trace('ioError: ' + event);
//dispatchEvent(event);
}
}
}
을 나는 데이터 공급자가 업데이트되는 경우 어떻게되는지 한 간단한 테스트입니다 :
다음은 예입니다
import fl.controls.*;
import fl.data.DataProvider;
import fl.controls.listClasses.CellRenderer;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
var tileList:TileList = new TileList();
tileList.move(220,40);
tileList.setSize(215, 400);
tileList.columnWidth = 215;
tileList.rowHeight = 86;
tileList.direction = ScrollBarDirection.VERTICAL;
tileList.setStyle("cellRenderer", CustomImageCell);
addChild(tileList);
tileList.dataProvider = getRandomDP(10);
setTimeout(resetDP,3000);
function resetDP():void {
tileList.dataProvider = getRandomDP(10);
}
function getRandomDP(size:int):DataProvider {
var result:DataProvider = new DataProvider();
for(var i:int = 0; i < size; i++) result.addItem({label:'item'+i,source:'wrong.url/'+Math.random()});
return result;
}
HTH
내가 정확히이 일을하고있다. 핸들러는 타일 목록이로드되는 동안 IOErrors를 포획합니다. 그러나 dataprovider를 변경하면 처리되지 않은 로더가 dataprovider 변경 중에 처리되었으므로 더 이상 처리되지 않는 IOErrorEvent를 처리하는 것처럼 처리되지 않습니다. 지나간. – WillyCornbread
@WillyCornbread 당신은 데이터 제공자를 변경함으로써 그것이 무엇을 의미합니까? 내 작은 테스트에서 데이터 공급자가 변경 되더라도 동작은 동일합니다. –
George - 해결책은 실제로 원래 답변이었습니다. 내 자신의 IORErrorEvent 처리기를 보호 된 로더에 추가하고 있지만 로더의 보호 된 'handleErrorEvent'메서드를 재정의하지 않았습니다. 일단 오버라이드를 사용하면 문제가 멈 춥니 다. 도움을 많이 주셔서 감사합니다. – WillyCornbread