2012-09-18 2 views
1

전체 목록이나 선택한 항목을 변경하는 CellRenderer에 대한 자습서가 있지만 AS3과 관련하여 아직 도움이되지 않아 도움이 필요한 부분이 있습니다. xml 파일에서 사용자 목록을로드하고 있습니다. 모든 것이 좋고 잘로드되지만, 실제로해야 할 일은 그룹이 색상을 지정하는 것입니다.Flash AS3 - 색상이 지정된 사용자 이름 목록 상자 색상이 다른 것

다시 목록에로드됩니다. 관리자가 빨간색 글꼴, 수정 용 녹색 글꼴, 멤버 용 검정색 글꼴을 만들면 XML 파일에서 루프를 추가합니다.

도움이 필요하십니까?

+0

우리는 일반적으로 목록의 항목 렌더러에 이런 종류의 물건을 처리합니다. 아이템 렌더러는 주어진리스트 아이템에 대한 데이터를 가지고 있고, 그 다음에 적절하게 렌더 할 수있다. 즉, 특정 데이터 요소가 관리자를위한 것이라면, 렌더러는 빨간색 글꼴을 사용한다. 사용중인 코드를 표시하면 다른 사람이보다 명확한 대답을 줄 수 있습니다. –

답변

0

주의의 부부가 알아야 할 있습니다

  1. 당신은 또한 필요, 글꼴 형식을 사용하도록 계획하는 경우 set the renderer styleembedFonts에 충실
  2. 개별 셀의 스타일을 설정하려면 때문에
  3. 먼저 목록이 채워질 때까지 기다려야합니다 (구성 요소의 수명주기의 내부 데이터 설정을 마칩니다). drawNow() 또는 invalidate()
  4. 마지막으로 render 핸들러에서 itemToCellRender() 메서드를 통해 스타일을 설정하는 개별 셀 렌더러에 액세스 할 수 있습니다.

여기 (관리자, 모드, 구성원으로 C를, B와 상상) 기본 예제 :

//in a setup function 
{ 
//some dummy data 
      var data:XML = <users> 
          <user name="user 1" group="a" /> 
          <user name="user 2" group="a" /> 
          <user name="user 3" group="a" /> 
          <user name="user 4" group="b" /> 
          <user name="user 5" group="b" /> 
          <user name="user 6" group="b" /> 
          <user name="user 7" group="c" /> 
          <user name="user 8" group="c" /> 
          <user name="user 9" group="c" /> 
          </users> 
      //create a list 
      var list:List = addChild(new List()) as List; 
      list.setSize(600,400); 
      list.move(0,400); 
      //setup a font AND set embefFonts to true 
      list.setRendererStyle("textFormat",new TextFormat("Siemens Sans SC Black",11,0xFF9900)); 
      list.setRendererStyle("embedFonts",true); 
      //populate list 
      for(var i:int = 0 ; i < data.user.length(); i++) list.addItem({label:String(data.user[i][email protected]),group:String(data.user[i][email protected])}); 
      list.invalidate();//tell list to refresh itself 
      list.addEventListener(Event.RENDER,listUpdated);//listen for the refresh 
} 
     //after the list refreshed 
     private function listUpdated(event:Event):void{ 
      //setup text formats 
      var formats:Dictionary = new Dictionary(); 
      formats["a"] = new TextFormat("Siemens Sans SC Black",11,0x990000); 
      formats["b"] = new TextFormat("Siemens Sans SC Black",11,0x009900); 
      formats["c"] = new TextFormat("Siemens Sans SC Black",11,0x000099); 

      var list:List = List(event.currentTarget); 
      for(var i:int = 0 ; i < list.dataProvider.length; i++) { 
       var item:Object = list.getItemAt(i); 
       var cr:CellRenderer = CellRenderer(list.itemToCellRenderer(item));//get the individual cell renderers 
       cr.setStyle("textFormat",formats[item.group]); //set styles per cell 
      } 
      list.removeEventListener(Event.RENDER,listUpdated);//clear listener 
     } 
+0

매우 유용합니다. 고맙습니다! – Cyrus

관련 문제