데이터 제공자를 변경할 때 플래시 타일 목록에서 처리되지 않은 #2044 오류를 처리하는 방법은 무엇입니까?
-
13-09-2020 - |
문제
사용자 정의 ImageCell 기반 항목 렌더러를 사용하는 타일리스트 구성 요소가 있습니다.때때로 검색하려는 이미지 중 일부를 찾을 수 없다는 것을 알고 있으며 사용자 정의 ImageCell 로더의 IEOrror 리스너를 통해 이 문제를 처리할 수 있습니다.
그러나 데이터 공급자를 설정한 다음 모든 이미지가 로드 또는 오류 프로세스를 완료하기 전에 변경되면 플래시 디버그 플레이어는 Firefox에서 이미지를 찾을 수 없다는 처리되지 않은 #2044 오류를 표시합니다.디버그 플레이어를 사용하는 오페라에서는 로드가 완료되지 않았다는 #2044가 발생합니다.
디버거 플레이어 대화 상자가 표시되지 않도록 이러한 오류를 포착하고 무시하는 방법을 찾을 수 없습니다.또한 디버그를 위해 Flash Builder IDE를 사용할 때 디버거는 이러한 오류에 대해 전혀 중단되지 않습니다. 다른 오류에 대해서는 문제 없이 중단할 수 있지만 플레이어에서만 중단됩니다.
이는 데이터 제공자가 변경될 때 오류 리스너가 삭제되는 것과 같지만 로더는 계속해서 처리되지 않은 #2044를 발생시킵니다.
효과적으로 처리하는 방법에 대한 아이디어가 있습니까?귀하의 시간과 도움에 미리 감사드립니다 -
비
해결책
사용자 정의 셀 렌더러의 생성자에서 보호된 셀 렌더러에 이벤트 리스너를 추가해야 합니다. 짐을 싣는 사람 인스턴스를 생성하고 IOError를 처리합니다.
예는 다음과 같습니다.
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