DataGrid itemrenderer

时间:2010-02-05 12:55:49

标签: flex

您好我已经在我的数据网格中添加了一个带有帮助itemrender的控件。但是有一个问题 在执行时,它在init和创建完成该控件的完成事件时出现两次 我在datagrid列中添加了它。

由于 Atul Yadav

<?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>

当我得到arr长度时,它只给我两倍数。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,第二个代码段是您在第一个代码段中实例化为<ns1:test>的自定义项呈示器。

DataGrid控件将在其认为合适时创建渲染器的实例 - 您实际上无法控制将创建多少个实例。因此,虽然列中可能有一行,但数据网格很可能已创建多个渲染器组件实例。正如您所看到的,结果是创建完成不止一次被调用,并且您在静态数组中获得的项目数量超出预期。在开发项目渲染器时,您必须考虑到:您不控制它们的实例化,并且它们被框架回收。最好的方法是让它们尽可能无国籍。