如何动态地将记录添加到flex中的数组中

How to dynamically append a record into an Array in flex?

本文关键字:添加 flex 记录 数组 何动态 动态      更新时间:2023-09-26

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

谢谢:)

总之

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

为什么

ArrayCollection -顾名思义-实际上只是Array的包装器,向其添加了一些在使用Flex框架时方便使用的功能。

所以当你做

initDG.addItem(theNewItem);

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

另一方面,如果你做了

DGArray.push(theNewItem);

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