2009-10-15 3 views
0

3 가지 상태를 가진 모듈을 itemrenderer로 만들었습니다. 주에서는 영화, 노래 및 TvShows라고합니다. 기본 상태는 비어 있습니다. itemRenderer는 Hbox, Vboxes 및 레이블로 구성됩니다.플렉스/AS3 다중 상태 항목 렌더러 질문

그리고 List 구성 요소를 만들었습니다.

내가하고 싶은 것은 내 List 구성 요소의 데이터를 채우고 내 ItemRenderer를 사용하여 표시되도록하려는 것입니다. 데이터베이스에서 꺼내 진 데이터에 따라 itemRenderer의 올바른 상태를 보여주고 싶습니다. 따라서 데이터베이스에서 가져온 레코드가 노래 인 경우 노래 상태를 표시하고 싶습니다. 영화 인 경우 영화 상태를 표시하고 싶습니다.

따라서 데이터가 빠져 나왔는지에 따라 itemrenderer의 현재 상태를 변경하고 싶습니다. 내가 어떻게 그럴 수 있니? 아무도 내가이 코드를 작성하는 방법을 보여줄 수 있습니까?

감사

답변

1

재정 당신의 CustomItemRenderer의 set data 방법과 데이터에 따라 적절한 상태를 할당합니다.

override public function set data(value:Object):void 
{ 
    super.data = value; 
    if(data.type == "song") 
    this.currentState = SONG_STATE; 
    else if(data.type == "movie") 
    this.currentState = MOVIE_STATE; 
    else if //and so on... 
} 
1

감사합니다.

this.currentState = MOVIE_STATE; 

당신이 저점 당신의 반복에 의해 모든 데이터를 조정해야 위의 옵션을

this.currentState = "MOVIE_STATE"; 

감사

DJ

0

해야한다 : 내가 알 유일한 것은이었다 데이터 배열 콜렉션을 작성하고 유형을 다른 상태 이름으로 설정하십시오.

아마 더 나은 해결책은 목록의 모든 항목을 반복하고 상태를 변경하는 것입니다.

private function changeItemrendererState():void 
    { 
     var item:mycustomitemrenderer; 

     for(var i:uint = 0; i < itemlist.numElements; i++) 
     { 
      item = itemlist.getElementAt(i) as mycustomitemrenderer; 

      item.currentState = "mynewstate"; 
     } 
    } 
<s:Scroller focusEnabled="false" hasFocusableChildren="true"> 
     <s:DataGroup dataProvider="{mydata}" itemRenderer="skins.mycustomitemrenderer" width="100%" height="100%" id="itemlist"> 
      <s:layout> 
       <s:TileLayout horizontalGap="2" verticalGap="2" columnAlign="justifyUsingWidth"/> 
      </s:layout> 
     </s:DataGroup> 
</s:Scroller> 

useVirtualLayout = "true"를 사용하면 표시되는 항목에만 영향을 미칩니다.

관련 문제