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 的回答绝对正确。我只想添加另外两个选项:

遍历 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 回答