如何从 sap.ui.table.Table 中的输入获取值?

How to get values from input in sap.ui.table.Table?

sap.ui.table.Table 中,我在一列中输入字段。会从后台获取近300条数据记录并绑定到其他列。

用户在输入字段中手动输入。此外,当他单击提交按钮时,我必须将所有输入的所有值作为数组。请给点建议。

您可以使用 table 的数据绑定来完成此操作,因为在 Table 控件上调用 getRows() 来访问每行的 Input 字段在这种情况下无济于事;它只有 returns 当前可见的行,并且您有大约 300 条记录可供访问。

解决方法如下:

  1. 从后端获取 JSONModel 中的所有数据。
  2. 通过迭代向模型数据中的每个项目添加一个 属性 说 inputValue
  3. 将此模型绑定到 table 并在 table 的模板中使用 inputValue 属性 绑定包含 Input 的列字段。

由于 JSONModel 支持双向绑定,用户在 Input 字段中输入的所有值都可以在您的模型中使用。

并且,最后迭代模型的数据以获得每一行的 inputValue

以上操作步骤:

第 1 步和第 2 步:

setModelForTable: function() {
    var oModel = sap.ui.model.json.JSONModel( < URLToLoadJSON > );
    var length = oModel.getData().results.length;

    for (var i = 0; i < length; i++) {
        var path = "/results/" + i + "/inputValue";
        oModel.setProperty(path, "");
    }
}

第 3 步:

现在,您的模型在所有数据项中都具有 inputValue 属性,将模型设置为 table;这将显示列中的所有 Input 字段最初为空,并将在用户修改时更新相应的模型条目。

<t:Column>
    <t:label>
        <Text text="User Input" />
    </t:label>
    <t:template>
        <Input value="{inputValue}" />
    </t:template>
</t:Column>

最后,获取数组中所有输入的值。

var length = oModel.getData().results.length;
var aInputvalues = []
for (var i = 0; i < length; i++) {
    var path = "/results/" + i + "/inputValue";
    aInputvalues.push(oModel.getProperty(path));
}

我有一个有点相似的案例,我是按以下方式做的。如果您确实不需要未更改的记录,则可以使用。

  1. 有一个变量来存储 [] 条已更改的记录
  2. 将更改附加到输入字段
  3. on change 将更改的记录推送到变量

    var source = event.getSource();
    source.getModel().getProperty(source.getBindingContext().getPath()); 
    

或输入字段的值。

    event.getSource().getValue();

如果你有一个记录 ID,你可以只推送这个 ID 和输入值。 4. 提交时遍历 []