2011-05-10 105 views
0

我创建每个要添加到NavigatorConent()的数据网格,但是,如何通过ID检索数据网格,以便我可以将ArrayCollection指向datagrid的数据提供者?无法找到datagrid

private var pdg:String; 
    private function stabAdd():void { 
       var dg1:DataGrid = new DataGrid(); 
       var cn:NavigatorContent = new NavigatorContent(); 
       stab.addElement(cn); 
       cn.name = "nc"+nu; 
       dg1.id = "nc"+nu; 
       pdg = dg1.id; 
       dg1.addEventListener(MouseEvent.CLICK,cc); 
       nu++; 

这将引发该PDG不能发现错误,我不知道为什么:

trace(DataGrid(pdg)); 
+0

你为什么试图动态给组件一个ID(或名称)?它的用途是什么?跟踪语句在代码的其余部分显示的位置在哪里?该方法何时被调用?什么是刺变量?你在使用Spark DataGrid或MX DataGrid吗?您使用的是哪个版本的Flex SDK?如果你不在循环中,nu ++有什么用途? – JeffryHouser 2011-05-10 02:52:15

+0

pdg是一个字符串,并且您试图将其转换为DataGrid。错误。其中,有很多不良的编码习惯正在进行,其中大部分Flextras已经提到。 – 2011-05-10 03:24:33

+0

我明白了,所以你建议对一个数据网格使用多个AC?我使用的tabnavigator将在每个导航器内容中包含数据网格。 Flex 4并使用mx:datagrid。 nu ++的目的是为每个数据网格分配一个唯一的名称(dg1,dg2等),以便我可以将AC分配给该数据网格的数据提供者 – Jonyang 2011-05-10 03:31:38

回答

1

NU ++的目的是分配 唯一的名称(DG1,DG2等),以每个 数据网格,这样我可以分配到AC该 DataGrid的数据提供程序

我可以尊重需要给每组件是唯一的名称。在ActionScript中执行此操作的适当方式不是指定组件的id/name字段,而是将组件的实例创建为变量。事情是这样的:

protected var myGrid : DataGrid; 

,现在您可以在任何地方访问myGrid的组成部分,或者在它的孩子,不会产生一些复杂的方案。如果需要多个DataGrid的,你可以将它们存储在一个数组:

protected var myGridArray : Array = new Array(); 

并在代码的某个地方以后 - 也许createChildren()做这样的事情:

loop 
var newGrid : DataGrid = new DataGrid() 
myGridArray.push(newGrid); 
end loop 

在大多数情况下,这是所有基于Flex列表的组件如何使用itemRenderer进行操作。他们有一系列可见的渲染器。

正如@J_A_X_ comments所述,您试图将pdg - 一个字符串 - 转换为DataGrid。我希望能够返回一个空值,因为Flex投射往往会悄然失败。

如果您需要更多帮助,您必须告诉我们您收到的明确错误,可能包含行号和更多代码。