2010-06-28 3 views
1

게임의 점수 목록을 만들고 있습니다. 이제 대부분의 목록에 동일한 ItemRenderer가 있어야합니다. 그러나 재생중인 사용자가 나열된 목록의 특정 행에서 다른 정보와 배경색을 나타내야합니다. 내가 어떻게 이걸 얻을 수 있니? 이미 상태로 문제를 해결하려고 flex 4 목록 ItemRenderer : 다른 행에 대해 서로 다른 itemrenderers를 사용할 수 있습니까?

업데이트는, 내가 2 주, 하나의 상태라고 '내'와 '다른 사람'이라는 2 상태를 만들었습니다.

내가 가진 문제는 사용자가 목록 행 중 하나를 클릭하면 상태가 바뀌지 않는다는 것입니다. 클릭 또는 무언가로 인해 상태가 올바른 행동이 아니라고 생각한 것입니다. 다른 데이터가하는 dataProvider의 해당 행에 포함되어있는 경우

+0

"다른 정보"는 데이터 제공 업체의 일부입니까, 아니면 다른 곳에서 가져와야합니까? – Amarghosh

+0

그것은 데이터 제공자 – ufk

+0

의 일부이므로 itemrenderer 내부에서 상태를 사용하려고 생각 했습니까? – Dan

답변

9

Flex 4와 함께 제공되는 spark List 컨트롤을 사용하면 일부 논리에 따라 다른 itemRenderer를 할당 할 수 있습니다.

itemRendererFunction 속성을 설정하여 사용자 지정 항목 렌더러 함수를 만들 수 있습니다.

<fx:Script> 
    <![CDATA[ 
     import renderers.*; 

     import mx.core.ClassFactory; 
     import spark.skins.default.DefaultItemRenderer; 

     private function list_itemRendererFunc(item:Object):ClassFactory { 
      var cla:Class = DefaultItemRenderer; 
      switch (item.type) { 
       case "employee": 
        cla = EmployeeItemRenderer; 
        break; 
       case "manager": 
        cla = ManagerItemRenderer; 
        break; 
       default: 
        break; 
      } 
      return new ClassFactory(cla); 
     } 
    ]]> 
</fx:Script> 

<s:List id="list" 
     labelField="name" 
     itemRendererFunction="list_itemRendererFunc" 
     horizontalCenter="0" 
     verticalCenter="0"> 
+1

itemRendererFunction이 솔루션 일 수 있다는 것에 동의합니다. 이것은 다른 정보가 도움이 될 수 있습니다. http://blog.flexexamples.com/2009/03/19/using-a-custom-item-renderer-function-with-the-fxlist-control-in-flex-gumbo/ – michael

0

, 당신은 오버라이드 (override) public set data 방법으로 데이터를 확인하고 그에 따라의 itemRenderer의 배경 색상을 설정할 수 있습니다. 특정 행에 더 많은 컨트롤이 필요한 경우 상태를 사용할 수 있습니다. 그냥 당신이 국가에 익숙하지 않은, 예 많은이의 itemRenderer를 할 당신은 구성 요소를 만들 수 Flex

+0

당신은 훨씬 더 완전한 대답으로 나의주의 제안 앞에 6 초 안에 들어갔다! upvotes/answer를 얻어야합니다 – DanK

0

states을 사용하여 거기 밖으로와는 다른 관점을 제공하는 경우 this.currentState = "currentUser";

override public function set data(item:Object):void 
{ 
    if(item.user == SomeGlobal.currentUser)//or outerDocument.currentUser 
    { 
    this.currentState = "currentUser"; 
    } 
    else 
    { 
    //reset to default state, coz item renderers are reused 
    this.currentState = ""; 
    } 
} 

설정 상태를 사용하는 행의 데이터에 따라 - 생성시 적절한 상태로 전환합니다.

관련 문제