2010-01-26 7 views
2

그리드에 1000 개 이상의 데이터 세트가 있습니다. 한 열은 외래 키의 값을 표시하는 데 사용되는 사용자 정의 itemRenderer를 사용합니다.플렉스 DataGrid ItemRenderer 문제

스크롤하지 않고 표시되는 모든 데이터 세트는 올바른 정보와 함께 표시됩니다. 그러나 스크롤하는 경우 일부 데이터 집합은 itemRenderer에 잘못된 값을 표시합니다. 지금까지 내가 이해 한 한, itemRenderers를 다시 사용했기 때문입니다.

하지만 재사용하는 것만 큼 잘못된 정보가 표시 될 수 있습니다. 그럼이 문제를 어떻게 해결할 수 있습니까?

편집 : 나는이 문제를 제거하기 위해 관리했다,하지만 난 내 계획을 가리 키도록 어쨌든 몇 가지 코드를 게시 할 예정입니다 : 나는 모든 왼쪽

<?xml version="1.0" encoding="utf-8"?> 

<mx:Script> 
    <![CDATA[ 
     private var dataAccess : DataAccess = DataAccess.getInstance(); 
     private var foreign : ArrayCollection = new ArrayCollection(); 

     private function onCreationComplete() : void 
     { 

      dataAccess.service.getForeignDatasets.addEventListener("result", onGetForeignDatasets); 
      dataAccess.service.getForeignDatasets(); 
     } 

     private function onGetForeignDatasets(event : ResultEvent) : void 
     { 
      foreign = event.result as ArrayCollection; 
      preSelect(); 
     } 

     //gets the entry from the foreign entity which matches 
     //the foreign key in this.data 
     private function preSelect() : void 
     { 
      for each(var obj : Object in foreign) 
       { 
        if(obj.id == data.foreignKey)) 
        { 
         value.text = obj.name; 
         return; 
        } 
       } 

      value.text = "";  
     } 

     private function onDataChange() : void 
     { 
      preSelect(); 
     }  
    ]]> 
</mx:Script> 

을 불필요한 코드 ...

위 코드는 작동하고 probl을 해결합니다. 잘못된 데이터를 표시합니다.

이 기능을 구현하는 다른 아이디어는 무엇입니까?

답변

0

이것은 항목 렌더러가 정보를 사적인 변수에 캐시하는 경우 (또는 다른 곳에서는 실제로)입니다. 아이템 렌더는 "data"속성을 통해 데이터를 가져옵니다. "데이터"속성에 포함되지 않은 데이터는 사용하지 않아야합니다. 외부 데이터를 얻기 위해 절대적으로 외부에 도달해야한다면, 데이터 속성이 변경 될 때마다 데이터를 무효화하십시오 (변경된 플래그를 표시하도록 데이터를 무시한 다음 super.data를 호출하십시오).

그래도 문제가 해결되지 않으면 아이템 렌더러 코드를 게시하십시오.

0

DataGrid 컨트롤에 대한 사용자 지정 ItemRenderer을 사용하면서이 문제가 발생했습니다. 다 괜찮 았지만 DataGrid를 스크롤 할 때 ItemRenderers가 올바른 값을 표시하지 못했습니다. 일어날 일을 이해하는 데 많은 시간이 걸렸습니다. 이유는 IremRenderers가 작동하는 방식입니다. itemRenderer는 재활용된다는 것을 기억하십시오. very good article about Item Renderers을 읽으십시오.

즉, 생성자 나 CreationComplete 이벤트가 아니라 다른 함수에서 ItemRenderer의 데이터를 설정해야합니다. MX DataGrid-를 들어

는이 같은 공공 기능 세트 데이터를 오버라이드 (override) 할 필요가 : 스파크 데이터 그리드에 대한

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

당신은

override public function prepare (hasBeenRecycled) 

가 도울 수있는 희망을해야한다.

관련 문제