2014-07-18 16 views
1

다음과 같은 문제가 발생합니다. "데이터"라는 개체가 있습니다. 여기에는 3 개의 속성이 있으며, 그 중 하나는 itemRendererData입니다. "itemRendererData"는 많은 속성 중 하나가 속성 "imageURL"(데이터 유형 : 문자열) 인 객체의 ArrayCollection입니다.ListItemRenderer의 ArrayCollection에서 이미지를 표시하는 중

저는 flex로 작업하고 있습니다. 뷰와 아이템 렌더러를 올바르게 정의했다. 뷰에는 데이터가 있습니다. imageURL 속성에 의해 지정된 URL에서 이미지를 가져 오기로되어 있습니다. 의 itemRenderer, 나는 소스

source = {data.itemRendererData.imageURL} 

, 선언하지만 이미지가 표시되지 않습니다.

답변

2

실제로는 바인딩을 처리하는 적절한 방법 인 FlexEvent.DATA_CHANGE 처리기를 사용하고 훨씬 더 많은 제어권을 제공합니다.

public function CustomItemRenderer() { 
    this.addEventListener(FlexEvent.DATA_CHANGE, this.dataChangeHandler); 
    this.addEventListener(FlexEvent.CREATION_COMPLETE, this.creationCompleteHandler); 
} 

private function creationCompleteHandler(e:FlexEvent) { 
    if (this.data) { 
     this.image.source = this.data.itemRendererData.imageURL; 
    } 
} 

private function dataChangeHandler(e:FlexEvent) { 
    if (this.data && this.initialized) { 
     this.image.source = this.data.itemRendererData.imageURL; 
    } 
} 

FlexEvent.CREATION_COMPLETE에 대한 처리기가 있습니다. 이는 구성 요소가 작성되기 전에 데이터가 실제로 설정되기 때문입니다. 따라서 처음 렌더러가로드 될 때 this.image은 null이고 this.image.source은 오류가 발생합니다.

그래도 작동하지 않는 경우 Image/BitmapImage이 렌더러의 직접 하위가 아닌지 확인해야합니다. 왜 이렇게되었는지 알아 내지 못했지만, Group의 자식으로 이미지를 설정했지만 렌더링하지 않는 문제가 수정되었습니다. 다시 한 번, 나는 이것이 왜 있었는지 전혀 알지 못한다. 그리고 나는 그것을 이해하려고 몇 시간 동안 시험했다.

추가 팁으로 모바일 애플리케이션에서 MXML 기반 ItemRenderer를 사용하지 마십시오. 순수 AS3 렌더러보다 눈에 띄게 느립니다.

+0

솔루션이 효과적입니다. 그리고 내 솔루션에서 오류를 찾을 수있었습니다. itemRendererData를 전달하기 때문에 소스의 "data"는 이제 "itemRendererData"를 참조합니다. 그래서 옳은 것은 source = {data.imageURL}; – akashrajkn