【问题标题】:How do I dynamically add an object to my Flex 3 Array Collection?如何动态地将对象添加到我的 Flex 3 数组集合?
【发布时间】:2013-08-15 01:18:58
【问题描述】:

我已经彻底搜索过,但没有找到这个问题的答案。也许我的问题是错误的。我的 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 个复选框。

所有这些都运行良好。当我尝试将新项目添加到 HardwareItems ArrayCollection 时,我遇到了障碍。

我认为我只是没有正确理解语法。当我尝试在警报之后立即放置一些代码以将新项目添加到 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 语法的所有文档,但我想我只是不明白。任何帮助表示赞赏。谢谢你。

【问题讨论】:

  • 你有定义HardwareItems的代码吗?根据您的描述,它听起来像是 var HardwareItems:ArrayCollection,所以我将忽略第一个明显的可能问题,即 HardwareItems 是一个类而不是一个实例。我能想到的另一件事是,如果您将 HardwareItems 用于数据绑定,请确保它是 [Bindable] - 否则,更改不会传播给用户。
  • debug模式下,addItem后,arrayCollection有item吗?这将是首先要检查的事情
  • @ketan 请停止批量编辑标签,因为它会将旧问题推到队列的顶部。你也是discussed on meta

标签: actionscript-3 apache-flex actionscript flex3 arraycollection


【解决方案1】:

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

请确保您:

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

    HardwareItems = new ArrayCollection();

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

    newItem = {};

无论如何,请记住,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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多