2010-02-05 79 views
1

嗨,我已經在我的數據網格中添加了幫助項目控件。但是有一個問題,執行時它會在初始化時創建兩次,並且該控件的創建完成事件 已添加到我的datagrid列中。DataGrid項目選擇器

感謝 阿圖爾·亞達夫

<?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 2010-02-05 14:08:07

回答

0

如果我理解正確的第二代碼片段是在第一個片段實例化爲<ns1:test>您的自定義項目渲染器。

DataGrid控件將創建渲染的情況下,作爲當它認爲合適的 - 你真的沒有多少情況下會得到創建的任何控制。因此,雖然列中可能有一行,但數據網格很可能創建了多個渲染器組件實例。結果,正如你所看到的,是創造完整的被稱爲不止一次和你在你的靜態數組中獲得更多的項目比你期待。當開發項目渲染器,你必須考慮到:你不控制自己的實例,他們是由框架回收。採取的最佳方法是儘可能使其成爲無國籍人。