如何动态地将对象添加到Flex 3阵列集合?

时间:2013-08-13 12:16:10

标签: actionscript-3 flex actionscript flex3 arraycollection

我已经彻底搜查了,但还没有找到这个问题的答案。也许我的问题是错的。我的tabNavigator的每个Canvas孩子共有30个孩子。该代码适用于计算和迭代子代,但是当我尝试将一个项添加到我的ArrayCollection时,它们都崩溃了。这是代码:

    private function addrNewDB():void {
        var q:int = 0;
        var t:int = tabNavigator.numChildren;

    while (q<t){
            var TNG:Array = tabNavigator.getChildren();

            var qnn:Array = TNG[q].getChildren() as Array;
            var gat:int = 0;
            var pat:int = TNG[q].numChildren;
            var newItem:Object = new Object();

            while (gat<pat){

                if (UIComponent(qunn[gat]) is CheckBox){
                    if (qunn[gat].selected == true){
                        var game:String = "Y";
                    }
                    else {
                        gm = "N";
                }
            Alert.show("gat: "+String(gat)+" | pat: "+String(pat)+"\n"+qnn[gat].id+" - "+qnn[gat].label+": "+gm);


            }           
                gat++;
            }
        q++;
        }
    }

这里发生的是我在运行时使用按钮动态添加标签。每个选项卡都有一个画布,文本框,标签,复选框和组合框。共有30个项目;其中七个是复选框。

我已经设置了这个代码来遍历tabNavigator中每个Tab(t)的每个Canvas子(pat)的每个子(组件),确定该组件是否是CheckBox,看看它是否被选中,然后提醒我每个画布上只有7个CheckBox。

所有这些都很有效。当我尝试将新项添加到HardwareItems ArrayCollection时遇到障碍。

我认为我只是没有正确的语法。当我尝试放置一些代码以便在Alert之后立即向HardwareItems添加新项目时,它会在第一个CheckBox之后停止警告我,所以我假设它遇到了某种类型的问题我的方式正在编码。

我想要的是帮助正确地为7个复选框中的每个复选框向HardwareItems数组集合添加新项目。

我试过这个:

HardwareItems.addItem({merch: lblMerchID.text, 
                               item: qnn(gat).label, 
                               manf: "", 
                               have: gm, 
                               requ: "", 
                               qual: "", 
                               location: "", 
                               id: qnn(gat).id});

和此:

                newItem['merch'] = lblMerchID.text;
                newItem['item'] = qnn(gat).label;
                newItem['qual' = "";
                newItem['loc'] = "";
                newItem['id'] = qnn(gat).id;

                        HardwareItems.addItem(newItem);
                        HardwareItems.refresh();

这也是:

                newItem.merch = lblMerchID.text;
                newItem.item = qnn(gat).label;
                newItem.qual = "";
                newItem.loc = "";
                newItem.id = qnn(gat).id;

                        HardwareItems.addItem(newItem);
                        HardwareItems.refresh();
很明显,这些都是不正确的方法来实现我想要的,但我只是尝试任何事情。顺便说一句,这些编码暴行都没有引起任何错误。但是,当我尝试它们时,我收到了一个警告......第一个CheckBox是30个项目中的23个。

我已经阅读了有关ArrayCollection和Array语法的所有文档,我想我还没有得到它。任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

无论如何,

addItem()方法应该可以工作。

请确保你:

  1. 在填写之前初始化集合:

    HardwareItems = new ArrayCollection();

  2. 在填写之前初始化对象:

    newItem = {};

  3. 无论如何,请记住,ArrayCollection有一个属性'source',它实际上是一个数组。 因此,您可以使用push()方法代替addItem:

    var HardwareItems:ArrayCollection = new ArrayCollection();
    var newItem:Object = {};
    newItem['merch'] = lblMerchID.text;
    newItem['item'] = qnn(gat).label;
    newItem['qual' = "";
    newItem['loc'] = "";
    newItem['id'] = qnn(gat).id;
    HardwareItems.source.push(newItem);
    HardwareItems.refresh();