AS3 tilelist component 삽질기
Computing/General : 2008/06/18 05:45
.... 불현듯 -_- basescrollpane 클래스를 삽질하던차.. -_-
몬가 복잡한 문제를 만나 다른삽질을 하다보니 발견한 컴포넌트다...
이글 보고 어 이런거네.. 하고 써볼생각한다면 글 끝까지 잘보길 바란다 -_-
위는 샘플파일에 들어있는 예제다..
보는것처럼 리스트컨트롤, dataprovider에 외부 이미지를 loader를 통해 가져오며, icon을 삽입할수도 있다.
레이블링도 되며
xml을 통해 간편하게도 구현이 가능하다.
대략 간만보면 이런식이다...
그러나 -_- 이녀석은 말그대로 예제용 -_- 컴포넌트였다.
이늠이 상속하는 개체는
순서다.
그리고 interface는 ifocusmanagercomponent 를 사용한다
그렇다 -_- 어딜봐도 loader 관련 클래스가 없다 -_-
그래서 클래스 원형을 찾아 삽질을 하다보니 -_-
TileList 의 style -_- 로써 imagecell 과 cellrenderer 가 호출되고 있다.
cellrender 에 uiLoader 가 함수내 var로 임시 호출되고 있다
따라서 dispatch 되는 이벤트는 개체상속을 받지 못한다.
그렇다 -_- 만약, load 하는 url 에 이미지가 없을 경우, dispatch event 를 통해 error 가 넘어오지 않는다.
이것이 첫번째 문제고,
(ioErrorEvent를 설정하면 error suppression 만 가능하지 실제 이벤트가 타고오진 않는다)
두번째 문제는 실질적인 loader에서 뿌리는 error url opening 메시지는 suppression 을 할수없다.
그말은 플래시등의 remote debug 가 활성화된 브라우저에서는 로드를 실패했다는 워닝창이 미친듯이 뜬다는소리다.
그래서 icellrenderer 를 인터페이스 매개체로 cellrenderer 클래스를 상속받은 새로운 imagecell class를 작성하고
내장에 event dispatcher 를 새로작성해주었지만 uiloader 단까지 이벤트핸들링이 안된다.
이말은 클래스 소스를 가져와서 같은형식으로 정의하고 try & catch 로 잡아다 묶어야 한다는소리다.
역시했다 -_-;;
결정적으로 cellrenderer 는 어느파일이 어떻게 안되었는가를 알지못한다.
현재 랜더링하고 있는 파일에 대해 파일명정도밖에는 failed 되었을때 알아오지 못한다.
다른말로는 dataprovider 에 정의된 추가적인 object를 가져와야 하는부분이 있는데,
여기서 dataprovider 랑 renderer가 별도로 노는 사건이 발생하게 되는것이다.
이를 묶어주기 위해서는 콜러보다 더 상위개층 (stage level) 을 통해서 무비클립을 서로 연결해주어야 하는데,
이경우 전체적인 방대한 데이터가 아규먼트로 돌아다니는 문제가 있었다.
그리고 결정타가 있었다. -_-
클릭을 한번하는순간.. 모든 listdata 이미지를 새로 로드한다...
이것도 원형을 가져다 수정할수는 있지만 -_- 갑자기 급 짜증이 나서 때려쳤다..
한 5시간 낚인기분이 든다 -_-
몬가 복잡한 문제를 만나 다른삽질을 하다보니 발견한 컴포넌트다...
이글 보고 어 이런거네.. 하고 써볼생각한다면 글 끝까지 잘보길 바란다 -_-
위는 샘플파일에 들어있는 예제다..
보는것처럼 리스트컨트롤, dataprovider에 외부 이미지를 loader를 통해 가져오며, icon을 삽입할수도 있다.
레이블링도 되며
xml을 통해 간편하게도 구현이 가능하다.
var imagesXML:XML = <images> <img src="http://www.helpexamples.com/flash/images/image1.jpg" /> <img src="http://www.helpexamples.com/flash/images/image2.jpg" /> <img src="http://www.helpexamples.com/flash/images/image3.jpg" /> </images>;
var dp:DataProvider = new DataProvider(imagesXML);
var myTileList:TileList = new TileList();
myTileList.dataProvider = dp;
myTileList.labelFunction = myLabelFunction;
myTileList.sourceField = "src";
myTileList.columnWidth = 100;
myTileList.rowHeight = 67;
myTileList.columnCount = 3;
myTileList.rowCount = 1;
myTileList.move(10, 10);
addChild(myTileList);
function myLabelFunction(item:Object):String {
var fileName:String = item.src;
var filePath:Array = fileName.split("/");
return filePath.pop();
}
대략 간만보면 이런식이다...
그러나 -_- 이녀석은 말그대로 예제용 -_- 컴포넌트였다.
이늠이 상속하는 개체는
Tilelist Inherit classes
TileList SelectableList BaseScrollPane UIComponent Sprite DisplayObjectContainer InteractiveObject DisplayObject EventDispatcher Object
순서다.
그리고 interface는 ifocusmanagercomponent 를 사용한다
그렇다 -_- 어딜봐도 loader 관련 클래스가 없다 -_-
그래서 클래스 원형을 찾아 삽질을 하다보니 -_-
TileList 의 style -_- 로써 imagecell 과 cellrenderer 가 호출되고 있다.
cellrender 에 uiLoader 가 함수내 var로 임시 호출되고 있다
따라서 dispatch 되는 이벤트는 개체상속을 받지 못한다.
그렇다 -_- 만약, load 하는 url 에 이미지가 없을 경우, dispatch event 를 통해 error 가 넘어오지 않는다.
이것이 첫번째 문제고,
(ioErrorEvent를 설정하면 error suppression 만 가능하지 실제 이벤트가 타고오진 않는다)
두번째 문제는 실질적인 loader에서 뿌리는 error url opening 메시지는 suppression 을 할수없다.
그말은 플래시등의 remote debug 가 활성화된 브라우저에서는 로드를 실패했다는 워닝창이 미친듯이 뜬다는소리다.
그래서 icellrenderer 를 인터페이스 매개체로 cellrenderer 클래스를 상속받은 새로운 imagecell class를 작성하고
내장에 event dispatcher 를 새로작성해주었지만 uiloader 단까지 이벤트핸들링이 안된다.
이말은 클래스 소스를 가져와서 같은형식으로 정의하고 try & catch 로 잡아다 묶어야 한다는소리다.
역시했다 -_-;;
결정적으로 cellrenderer 는 어느파일이 어떻게 안되었는가를 알지못한다.
현재 랜더링하고 있는 파일에 대해 파일명정도밖에는 failed 되었을때 알아오지 못한다.
다른말로는 dataprovider 에 정의된 추가적인 object를 가져와야 하는부분이 있는데,
여기서 dataprovider 랑 renderer가 별도로 노는 사건이 발생하게 되는것이다.
이를 묶어주기 위해서는 콜러보다 더 상위개층 (stage level) 을 통해서 무비클립을 서로 연결해주어야 하는데,
이경우 전체적인 방대한 데이터가 아규먼트로 돌아다니는 문제가 있었다.
그리고 결정타가 있었다. -_-
클릭을 한번하는순간.. 모든 listdata 이미지를 새로 로드한다...
이것도 원형을 가져다 수정할수는 있지만 -_- 갑자기 급 짜증이 나서 때려쳤다..
한 5시간 낚인기분이 든다 -_-





짝짝짝