从动态创建的TextInput字段中获取Flex TextInput.text

时间:2012-12-19 16:00:46

标签: flex

我通过类似于下面的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名称

非常感谢

3 个答案:

答案 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;
}