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

时间:2016-08-31 02:43:47

标签: sapui5 sap-fiori

sap.ui.table.Table中,我在一列中有输入字段。它将从后端获得近300条数据记录,并在其他列中绑定。

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

2 个答案:

答案 0 :(得分:3)

您可以使用表的数据绑定来执行此操作,因为在getRows()控件上调用Table来访问每行的Input字段在这种情况下无效;它只返回当前可见行,您有大约300条记录可供访问。

以下是解决方案:

  1. JSONModel
  2. 获取后端的所有数据
  3. 通过迭代对模型数据中的每个项目添加一个属性 inputValue
  4. 将此模型绑定到表格并使用表格模板中的 inputValue 属性来绑定包含Input字段的列。
  5. 由于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 属性的模型,在表上设置模型;这将显示最初列为空的所有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 :(得分:1)

我的情况有点类似,我是按照以下方式做的。如果你真的不需要没有改变的记录,那就可以了。

  1. 有一个变量来存储已更改记录的[]
  2. 将更改附加到输入字段
  3. 在更改时将记录更改为变量

    var source = event.getSource();
    source.getModel().getProperty(source.getBindingContext().getPath()); 
    
  4. 或输入字段的值。

        event.getSource().getValue();
    

    如果您有记录ID,您只需按下此ID和输入值即可。 4.提交迭代通过[]