0

徹底的に検索しましたが、この質問に対する答えは見つかりませんでした。多分私の質問は間違っています。tabNavigator の各キャンバスの子に合計 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 項目あります。そのうちの 7 つはチェックボックスです。

このコードを設定して、tabNavigator の各 Tab(t) の各 Canvas 子 (pat) の各子 (コンポーネント) を反復処理し、コンポーネントが CheckBox であるかどうかを判断し、選択されているかどうかを確認してから、警告を表示します。各 Canvas の 7 つの CheckBoxes のみ。

これはすべてうまく機能します。新しいアイテムを HardwareItems ArrayCollection に追加しようとしたときに問題が発生しました。

構文が正しくないだけだと思います。Alert の直後に HardwareItems に新しいアイテムを追加するコードを配置しようとすると、最初の CheckBox の後で Alerting が停止するため、コーディングの方法で何らかの問題が発生していると想定しています。それ。

私が望むのは、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();

これらが私が望むことを達成するためのすべての間違った方法であることは明らかですが、私は何でもしようとしています. ちなみに、これらのコーディングの残虐行為はいずれもエラーをスローしませんでした。しかし、それらを試してみると、アラートが 1 つ表示されました... 30 項目中 23 項目にある最初の CheckBox です。

ArrayCollection と Array 構文に関するすべてのドキュメントを読みましたが、理解できないと思います。どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

0

addItem() メソッドはとにかく動作するはずです。

次のことを確認してください。

  1. 記入する前にコレクションを初期化します。

    HardwareItems = 新しい ArrayCollection();

  2. 入力する前にオブジェクトを初期化します。

    newItem = {};

とにかく、ArrayCollection にはプロパティ 'source' があり、これは実際には配列であることを覚えておいてください。したがって、addItem の代わりに、次のように push() メソッドを使用できます。

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();
于 2013-10-30T18:30:42.120 に答える