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

Posted

技术标签:

【中文标题】从动态创建的 TextInput 字段中获取 Flex TextInput.text【英文标题】:Get Flex TextInput.text from dynamically created TextInput field 【发布时间】:2012-12-07 00:50:56 【问题描述】:

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

非常感谢

【问题讨论】:

【参考方案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。在我看来,这是迄今为止最干净的解决方案,因为它很好地将您的视图与模型分开。

【讨论】:

这自然不会授予对用户编辑的访问权限——您可能可以直接获取 itemRenderer 并询问,但它不会反映在 dataProvider 中。一种选择是将此示例转换为 DataGrid @MichaelBrewer-Davis 是的。只需自己运行代码即可。 @RIAstar:我很抱歉。您的编辑有帮助。我确实尝试过运行代码,但(过度)将其简化为不起作用的地方(直接使用字符串作为@data,而不是带有字符串属性的对象)。【参考方案2】:

您必须在创建字段时保存对字段的引用。我建议将它们存储在一个数组中:

// 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);

【讨论】:

【参考方案3】:

使用 [] 引用您的输入:

for(var i:int=1; i <= NumberOfSelections; i++)
    someVariable = this["Name" + i].text;

【讨论】:

以上是关于从动态创建的 TextInput 字段中获取 Flex TextInput.text的主要内容,如果未能解决你的问题,请参考以下文章

在提交时清除所有 textInput 字段反应本机

使用Javascript删除动态创建的字段

从 Swift (3.1) 表格视图中动态创建的单元格获取有序的文本字段数据

如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?

无法为动态创建的 react-native TextInput 保存值

如何在 React Native 中使用状态从 TextInput 获取值?