我通过类似于下面的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名称
非常感谢
答案 0 :(得分: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
即可。在我看来,这是迄今为止最干净的解决方案,因为它很好地将您的视图与您的模型区分开来。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
使用[]引用您的输入:
for(var i:int=1; i <= NumberOfSelections; i++){
someVariable = this["Name" + i].text;
}