如何在flex中动态地将记录追加到数组中?

时间:2013-05-06 13:23:33

标签: javascript arrays flex

我在flex中有一个mxml视图,我需要动态地将数据添加到DataGrid组件。

这是初始化DataGrid的地方:

<mx:DataGrid id="myGrid" width="100%"
    dataProvider="{initDG}" >
    <mx:columns>
        <mx:DataGridColumn dataField="Identifier" />
        <mx:DataGridColumn dataField="Name" />
    </mx:columns> 
</mx:DataGrid>

这是脚本部分:

private var DGArray:Array = new Array;

[Bindable]
public var initDG:ArrayCollection;

private function onCreation():void{
    initData();
}

public function initData():void {
   initDG=new ArrayCollection(DGArray);
 }

private function onShow():void{
    for (var child:Object in children) {
          var details:Array = null;
          if (child instanceof String) {
              var test:String = children[child].toString();
              details = test.split(",");
          }
          //Here I need to make an object like this one:
          // record = {Identifier: details[0] , Name: details[1]};

          this.DGArray.push(the record created);
    }


}

我做了这个方法,因为如果DGArray是一个静态数组它可以工作:

 private var DGArray:Array = [
     {Identifier:'001', Name:'Slanted and Enchanted'},
     {Identifier:'002', NAme:'Brighten the Corners'}];

有人能告诉我如何创建记录并将其添加到DGArray吗?

感谢:)

1 个答案:

答案 0 :(得分:0)

简而言之

通过ArrayCollection实例而不是Array实例添加或删除项目。

这就是为什么

ArrayCollection - 正如其名称所暗示的那样 - 实际上只是Array的一个包装器,为它添加了一些在使用Flex框架时派上用场的功能。

所以当你这样做时

initDG.addItem(theNewItem);

新项目也会自动添加到基础数组中 此外,此函数还将调度CollectionEvent,它将通知DataGrid其dataProvider中的数据已更改,应重新绘制以反映这些更改。

如果另一方面你做了

DGArray.push(theNewItem);
像你一样,你直接改变底层数组。这并没有真正破坏任何东西;你仍然可以通过例如访问新项目ArrayCollection.getItemAt()也是如此,但DataGrid从未被通知过更改,因此它没有重绘并继续显示旧数据。