您好我已经在我的数据网格中添加了一个带有帮助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长度时,它只给我两倍数。
答案 0 :(得分:0)
如果我理解正确,第二个代码段是您在第一个代码段中实例化为<ns1:test>
的自定义项呈示器。
DataGrid控件将在其认为合适时创建渲染器的实例 - 您实际上无法控制将创建多少个实例。因此,虽然列中可能有一行,但数据网格很可能已创建多个渲染器组件实例。正如您所看到的,结果是创建完成不止一次被调用,并且您在静态数组中获得的项目数量超出预期。在开发项目渲染器时,您必须考虑到:您不控制它们的实例化,并且它们被框架回收。最好的方法是让它们尽可能无国籍。