2009-06-12 8 views
1

(아마도 매우 큰) 데이터 그리드에 스크롤 가능한 시점을 제공하는 사용자 지정 플렉스 구성 요소를 구현하고 있습니다. ItemRenderer 패턴을 사용하여 주어진 시간에 화면에 표시되는 요소에 대한 UIComponents 만 가질 수 있습니다. 즉, 표준 DataGrid 컨트롤과 비슷한 것입니다.'사전 측정'플렉스 구성 요소

하나의 요구 사항은 제공된 데이터에 맞게 표 셀을 동적으로 크기 조정하여 열 너비와 행 높이를 앞쪽에 알 수 있도록하는 것입니다.

이 요구 사항은 구성 요소의 dataSource 또는 itemRenderer가 실행될 때 전체 격자의 '사전 측정'단계를 수행해야 함을 의미합니다 (사용자가 스크롤하고 새로운 셀이 표시 될 때 열 너비와 행 높이가 변동 할 수 없음). 변경됩니다. 표준 Flex 구성 요소 측정 작업을 사용하여이 사전 측정 단계를 수행하고 싶습니다.

  • 세트 :

    • 의 itemRenderer 인스턴스
    • 데이터 소스의 각 셀에 대한 itemRenderer를
    • 를 초기화 구하는 :

      이 미리 측정 단계에 대한 나의 현재 전략입니다 해당 셀 데이터에 대한 itemRenderer의 'data'객체

    • 구성 요소의 'commitProperties()'
    • 측정을 기반으로
    • '측정()'
    • 업데이트 열 너비/행 높이를 적절하게 구성 요소는

차라리 응용 프로그램의 표시 목록에 itemRenderer를 첨부하지 않는 게 좋을 결과,하지만 그것을 의미 프레임 워크에 의해 초기화되지 않습니다. 또한 renderer의 초기화 및 commitProperties/측정 단계가 동 기적으로 발생해야합니다. 이를 달성하기 위해 복제해야하는 Flex 구성 요소 라이프 사이클 관리 프레임 워크가 얼마나 많은지 무서워합니다. 이 전략의 타당성에

  • 어떤 생각 :

    그래서 나는 지혜의 말에 나는보다 더 많은 경험들에 전화를?

  • 이 측정을 수행하기 위해 프레임 워크를 어떻게 우아하게 사용할 수 있을지에 대한 제안 사항이 있습니까?
  • 셀 크기를 결정하는 더 좋은 전략은 무엇입니까?

답변

1

프레임 워크 코드를 조금 연구했는데 초기 결과가 표시된다면 이것은 내가 두려워하는 것만 큼 고통스럽지 않습니다. 그것의 용기 :

var renderer:IListItemRenderer = getRenderer(); 
renderer.initialize(); 
for each (var cell:Object in cells) { 
    renderer.data = cell; 
    renderer.validateProperties(); 
    renderer.validateSize(true); 
    // Access renderer's size properties here 
} 

'recursive = true'플래그를 validateSize에 전달하는 것은 이전에 누락 된 키입니다. 불행히도 validateProperties에 해당하는 플래그가 없으므로 아마 임의의 ItemRenderers에 대해 신뢰할 수 있도록 구현해야 할 것입니다.당신이 접근있어 함께이 놀이로 올 것이다, 그러나 당신이 당신의 렌더러의 데이터의 상단에

super.data = data

을 설정하는 방법을 많이

0

나는 확실하지 이런 식으로 itemRenderers을 적용, 그래서 적이 세터? 예 :

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

하지 않으면, 당신은을 추가하려고하고 재귀 플래그에 대한 필요성을 제거하면 볼 수 있습니다 validateProperties().

+0

그래, 놀라 울 정도로 나는 super.data를 설정하는 것을 기억했다. :) 내 자신의 재귀 루틴을 작성하는 것은 간단한 문제 였고 지금까지는 잘 작동하는 것 같습니다. 건배! – Aron