2010-02-05 2 views
1

안녕하세요, 저는 DataGrid의 도움말 itemrender로 컨트롤을 추가했습니다. 하지만 실행시에 이 데이터 그리드 열에 추가 한 해당 컨트롤 의 init 및 작성 완료 이벤트에 2 번 온다고하는 문제가 있습니다.DataGrid itemrender

감사 아툴 야다 브

<?xml version="1.0" encoding="utf-8"?> 
<mx:DataGridColumn xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:ns1="Component.*" > 
<mx:Script> 
    <![CDATA[ 
     [Bindable] 
     public var columnID:String=""; 
     [Bindable] 
     public var ColumnData:String=""; 
]]> 
</mx:Script> 
    <mx:itemRenderer> 
     <mx:Component> 
     <ns1:test > 
     </ns1:test> 
     </mx:Component> 
    </mx:itemRenderer> 
</mx:DataGridColumn> 

내 제어 코드 : 내가 도착 길이를 얻을 때

<?xml version="1.0" encoding="utf-8"?> 
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" xmlns:ns1="View.*" creationComplete="init(event)"> 
<mx:Script> 
    <![CDATA[ 
     import mx.controls.Alert; 
     private static var arr:Array; 
     private function init(e:Event):void{ 
      if(!arr) 
       arr=new Array(); 
      arr.push(this); 
      btn_apply.addEventListener(MouseEvent.CLICK,function(e:Event):void{Alert.show(arr.length.toString());}); 
     } 
    ]]> 
</mx:Script> 
    <mx:Button label="Button" id="btn_apply"/> 


</mx:VBox> 

이 나에게 단지 두 수를 제공합니다.

+1

일부 코드를 붙여 넣을 수 있습니까? – MysticEarth

답변

0

나는 두 번째 코드는 첫 번째 코드에서 <ns1:test>로 인스턴스화 사용자 정의 항목 렌더러입니다 제대로 이해하고.

DataGrid 컨트롤로 렌더러의 인스턴스를 생성하고는 적합한 경우 - 당신은 정말 만들어 얻을 것이다 얼마나 많은 인스턴스의 모든 컨트롤이 없습니다. 따라서 열에 한 행이있을 수 있지만 데이터 격자는 렌더러 구성 요소의 인스턴스를 두 개 이상 만들었을 가능성이 큽니다. 그 결과, 당신이 볼 수 있듯이, 작성 완료 한 번 이상 호출하고 당신이 기대하는 것보다 당신이 당신의 정적 배열에 더 많은 항목을 받고 있다는 점이다. 항목을 개발하는 렌더러 때 당신은 것을 고려해야한다 : 당신이 자신의 인스턴스를 제어하지 않으며 그들은 프레임 워크에 의해 재생됩니다. 취할 수있는 최선의 방법은 가능한 한 무국적자로 만드는 것입니다.