2010-08-17 5 views
0

플렉스에서 다음과 같은 시나리오가있는 사람이 있는지 궁금합니다.플렉스 스위치 항목 렌더러

내부의 다른 렌더러에 위임 한 사용자 정의 항목 렌더러를 보유하고 싶습니다.

데이터 그리드에서 행의 데이터 제공자에 부울 값이있는 경우 확인란을 표시하는 등의 이유가있을 수 있습니다. 값이 boolean이 아닌 경우 기본 항목 렌더러를 사용합니다.

기본적으로 프록시 객체 (프록시 클래스는 아니지만)를 사용하여 모든 렌더러를 하위 렌더러에 위임 할 수있는 렌더러를 사용할 수 있기를 바랬습니다.

설명하기가 어렵습니다.

편집 한

나는 다음은 내가 생각했던 것의 명확한 아이디어를 제공합니다 생각합니다. 이것은 단지 아이디어를 보여주기위한 목적으로 신속하게 깨어납니다.

SwitchingRenderer.as

package com.example 
{ 
    import mx.controls.CheckBox; 
    import mx.controls.dataGridClasses.DataGridItemRenderer; 
    import mx.controls.listClasses.BaseListData; 
    import mx.controls.listClasses.IDropInListItemRenderer; 
    import mx.core.IDataRenderer; 
    import mx.core.UIComponent; 

    public class SwitchingRenderer extends UIComponent implements IDataRenderer, IDropInListItemRenderer 
    { 
     private var checkboxRenderer:CheckBox; 
     private var defaultRenderer:DataGridItemRenderer; 
     private var currentRenderer:IDataRenderer; 
     public function SwitchingRenderer() 
     { 
      this.checkboxRenderer = new CheckBox(); 
      this.defaultRenderer = new DataGridItemRenderer(); 
      this.currentRenderer = defaultRenderer(); 
      super(); 
     } 

     public function get data():Object 
     { 
      //If the data for this cell is a boolean 
      // currentRender = checkBoxRenderer 
      // otherwise 
      // currentRenderer = defaultRenderer 
     } 

     public function set data(value:Object):void 
     { 
      currentRenderer.data = value; 
     } 

     public function get listData():BaseListData 
     { 
      return currentRenderer.listData; 
     } 

     public function set listData(value:BaseListData):void 
     { 
      currentRenderer.listData = value; 
     } 



    } 
} 

답변

2

플렉스 4 스파크 구성 요소를 사용하는 경우가 여기에

는 인터 웹에서 good sample되면, itemRendererFunction로 본다.

불행히도 DataGrid와 같은 Flex 3 구성 요소는이를 지원하지 않습니다.

itemRenderer로 보낸 데이터가 부울 값이 아닌 경우 표시 할 내용이 약간 모호합니다. 그러나, 컴포넌트의 가시적 인 속성을 교환하거나, 상태를 변경하거나, ViewStack의 selectedIndex를 변경하는 것을 포함하여 데이터 변경 이벤트를 기반으로 컴포넌트의 시각적 모양을 쉽게 수정할 수 있습니다. 이러한 모든 작업은 itemRenderer 내에서 수행 할 수 있습니다.


편집 :

사용자의 추가 포스팅을 바탕으로, 나는 그가 후에 다음과 같이 수행 할 수 있습니다되는 추가 것 : 나는 약간 내 질문에 clarifed 한

public function get data():Object 
{ 
    if(this.data is Boolean){ 
     checkBoxRenderer.visible = true; 
     defaultRenderer.visible = false; 
    } else { 
     checkBoxRenderer.visible = false; 
     defaultRenderer.visible = true; 

    } 

} 
+0

내가 희망 . – Wes

+1

이에 따라 제 답변을 편집했지만 원래 게시물에는 아무런 문제가 없음을 지적 할 것입니다. 이 문제를 구현하는 데 문제가 있습니까? 귀하의 질문에 알고리즘 논리가 이미 정의되어 있습니다. – JeffryHouser

+0

예 이전에 이것을 고려했습니다. 내 질문이 다르다는 것을 이해합니다. 그것의 유용한 대답은 그렇습니다. 나는 그 방법이 효과가 있는지보기 위해 노력하고 있습니다. – Wes

관련 문제