0

以下のようなforループを介していくつかのTextInputボックスを作成しています。NumberOfSelections変数は、ユーザーからの入力によって異なります。

    for(var i:int=1; i <= NumberOfSelections; i++){
            InputField = new TextInput;
            InputField.id = "Name" + i
            InputField.text = "2" 
            HGroup1.addElement(InputField);
    }

TextInputテキストは実行時に編集可能であり、ユーザーは数値を入力してから、新しい関数を呼び出す計算ボタンを押します。すべてのTextInputフィールドから情報を取得するにはどうすればよいですか。たとえば、NumberOfSelectionsが4の場合、ユーザーが入力した4つの数字すべてを取得して、それらを合計するにはどうすればよいでしょうか。一意のID名を使用することは可能ですか?

どうもありがとう

4

3 に答える 3

1

Flextraの答えは間違いなく正しいです。他に2つのオプションを追加したいと思います。

HGroupの子をループします

for (var i:i=0; i<hGroup1.numElements; i++) {
    var inputField:TextInput = hGroup1.getElementAt(i) as TextInput;
    if (inputField) doSomthingWith(inputField.text);    
}

「ベストプラクティス」の観点からは、これはあまりきれいなアプローチではないことに注意してください。
やや良いアプローチは

動的インスタンス化を破棄し、代わりにDataGroupを使用します

これはまさにDataGroupが行うことを意図しているためです。

<s:DataGroup dataProvider="{dp}">
    <s:itemRenderer>
        <fx:Component>
            <s:ItemRenderer>
                <s:TextInput text="@{data.myValue}"/>
            </s:ItemRenderer>
        </fx:Component>
    </s:itemRenderer>

    <s:layout>
        <s:HorizontalLayout/>
    </s:layout>
</s:DataGroup>

myValueこれが機能するには、プロパティをバインド可能として宣言する必要があることに注意してください。
これで、アイテムをループしdpて計算を実行し、フレームワークに動的インスタンス化を処理させることができます。TextInputを追加/削除する必要がある場合は、アイテムをに追加/削除するだけdpです。私の意見では、これはモデルからビューをうまく分離するため、これがはるかにクリーンなソリューションです。

于 2012-12-19T16:43:41.007 に答える
0

フィールドを作成するときに、フィールドへの参照を保存する必要があります。それらを配列に格納することをお勧めします:

// somewhere in your code; define the variable
public var textBoxArray : Array = new Array();

// somewhere in some method create the textBoxes
for(var i:int=1; i <= NumberOfSelections; i++){
        InputField = new TextInput;
        InputField.id = "Name" + i
        InputField.text = "2" 
        HGroup1.addElement(InputField);
        textBoxArray.push(InputField);
}
于 2012-12-19T16:30:53.013 に答える
0

[]を使用して、入力を参照します。

for(var i:int=1; i <= NumberOfSelections; i++){
    someVariable = this["Name" + i].text;
}
于 2012-12-19T16:34:43.450 に答える