2013-08-05 3 views
0

DataGrid를 스크롤 할 때 문제가 있습니다. 스크롤 할 때 내 항목 렌더러 열의 값이 손실됩니다. 내 코드에서 MouseOver 및 MouseOut에서 itemrenderer (레이블)의 색을 변경합니다. DataGrid를로드 할 때이 잘 작동하지만 MouseOver 이벤트가 실행 된 것처럼 일부 값을 이미 자신의 색을 변경할 내 눈금 아래로 스크롤 할 때.Flex에서 DataGrid를 스크롤 할 때 데이터 값이 손실됩니다.

어떤 문제가 발생했는지 알 수 있습니다.

내 DataGrid 및 itemrenderer 코드를 살펴보십시오. 제 경우에는 유연한 DataGrid를 사용하고 있습니다.

귀하의 소중한 도움에 감사드립니다.

 <flxs:columnLevel> 
          <flxs:FlexDataGridColumnLevel> 
           <flxs:columns> 
<flxs:FlexDataGridColumn dataField="testcol" width="118" id="coltest"> 
<flxs:itemRenderer> 

    <fx:Component> 
               <mx:VBox horizontalAlign="left" paddingLeft="10" verticalAlign="middle"> 

                <fx:Script> 
                 <![CDATA[ 

                  import mx.controls.Alert; 

                  protected function lbl1_clickHandler(event:MouseEvent):void 
                  { 
                   //Do Something      
                  } 

                  protected function lbl1_mouseOverHandler(event:MouseEvent):void 
                  { 
                   var dataColor:uint; 
                   var dataUnderline:String = 'none'; 
                   if (data.payer == 'D'){ 
                    dataColor = 0x999999; 

                   } 
                   else{ 
                    dataColor = 0x0DACE0; //color 
         } 

                  } 

                  protected function lbl_mouseOutHandler(event:MouseEvent):void 
                  { 
                   var dataColor:uint; 

                   if (data.payer == 'D'){ 
                    dataColor = 0x999999; 
                                    } 
                   else{ 
                    dataColor = 0x000000; 

                   } 
                  } 
    ]]> 
                </fx:Script> 
                <mx:Label id="lbl" paddingLeft="10" left="10" fontWeight="normal" mouseOut="lbl_mouseOutHandler(event)" mouseOver="lbl_mouseOverHandler(event)" text="{data.testcol}" click="lbl1_clickHandler(event)"/> 
               </mx:VBox> 
              </fx:Component> 
             </flxs:itemRenderer> 
    </flxs:FlexDataGridColumn> 
        </flxs:columns> 
          </flxs:FlexDataGridColumnLevel> 

         </flxs:columnLevel> 

        </flxs:FlexDataGrid>* 

답변

2

짧은 대답은 : 그것은 이전의 속성을 유지합니다, 그래서 당신은 당신의 itemRenderer의 "데이터 세트"를 무시하지 않았습니다.

플렉스 세계의 아이템 렌더러는 재활용됩니다. 즉, 목록에 100 개의 오브젝트가있을 수 있지만 인라인 itemrenderer의 실제 인스턴스는 10-12 개뿐입니다. 주의해야 할 점은 itemrenderer에 새 데이터가 채워지면 데이터 종속 속성이 재설정되지 않는다는 것입니다. 리셋이 부족한 이유는 실제로 렌더링 된 렌더러가 실제로는 보이지 않는 것입니다.

표준 해결책은 데이터가 설정 될 때 정확하게 작동하는 "설정 데이터"기능을 무시하는 것입니다. 비슷한 문제가 발생하면 내 코드는 다음과 같이 보입니다 (오전 9시 메모리로 할 수있는 최상의 방법).

여기는 more information의 링크입니다.

+0

세부 정보 주셔서 감사합니다. – FlexyBoz