在sapui5中读取Table中的用户输入

时间:2016-05-06 12:41:27

标签: json sapui5

我正在SAPUI5编写一个前端程序,它应该允许用户将数据(如字符或数字)输入表格,然后在点击按钮后读取数据#34;提交"

到目前为止,我所看到的是与从选定行获取数据相关的所有内容。

我对这个领域很陌生,所以我感谢任何帮助!

我正在使用sap.ui.commons.table.Table。该表最初从JSON文件中获取数据,但我已经完成了测试绑定的数据。

//data definition: 
var oPosData = [{PoItemI : "0010"}];

//Table: 
var oTable = new sap.ui.table.Table("PoData",{
    //title: "Positionsdetails",
    visiblRowCount: 5,
    firstVisibleRow: 3,
    selectionMode: sap.ui.table.SelectionMode.Single
});

// For simplicity, i will just ad 1 column to the table. but i have more
//Positionsnummer:
    var oColumn_PosNr = new sap.ui.table.Column("PosNr",{
    label: new sap.ui.commons.Label({text: "Position"}),
    //template: new sap.ui.commons.TextView().bindProperty("text", "Positionsnummer"),
    template: Input1 = new sap.ui.commons.TextField("PosNrTF",{
        key: "text", 
        value: "{PoItemI}"
    }),
    //sortProperty: "Positionsnummer",
    //filterProperty: "Positionsnummer",
    width: "200px"
});

//Input1.setValue("Bla");  Input1.getValue());
//Input1.attachChange(function(oEvent) {
    var output = oEvent.getSource().getBindingContext().getPath();
    alert('Text changed to : '+ output);
    console.log(output)
});
oTable.addColumn(oColumn_PosNr);

//Create a model and bind the table rows to this model
var oModel_Item = new sap.ui.model.json.JSONModel();
oModel_Item.setData({modelData: oPosData});
oTable.setModel(oModel_Item);
oTable.bindRows("/modelData");

使用此表格控件执行此操作是否错误?或者我做绑定错了?当我试着读它时它不起作用。

我也很难提取控件的绑定部分。

// Submit button
// I would be happy if this button prints me the value, that is stored in the
//table 

var oButton1 = new sap.ui.commons.Button({
text : "Submit",
style: sap.ui.commons.ButtonStyle.Emph,
width: '50%',
//tooltip : "",
//press : function() {alert('Pressed me' + );}
press : function() {

var table_model = sap.ui.getCore().getControl("PoData").getModel();//.getPath();//.getPath();
var table_row = sap.ui.getCore().getControl("PoData").getRows()[1].getCells()[1];//.getValue();
var table_path = sap.ui.getCore().getControl("PosNrTF").getBindingContext(table_model);//.getPath();
var table_column_LABEL = oTable.getColumns()[0].getLabel().mProperties.text;
var table_column_template = oTable.getColumns()[0][1];//getBindingContext();

alert(table_column_LABEL);
alert(table_model);
alert(table_row);
alert(table_path);
alert(table_column_template);

},
layoutData : new sap.ui.layout.GridData({
    indent: "L5 M5",
    span: "L1 M6 S12"
})

});

如果存储在列中,我无法获取存储在列模板部分中的值。

我应该以不同的方式执行此操作,例如向表中添加行而不是列吗?我遇到了 CustomData Content ,但不知道如何使用它,如果这解决了问题?!我是否应该使用绑定,如果我只是对用户输入或绑定的数据感兴趣将通过"自动更新值"通过双向绑定(不知道如何做到这一点)。

2 个答案:

答案 0 :(得分:0)

我有点困惑,因为你的解释不明确,但让我们看看你的代码有一些有价值的评论:

  • 首先,我建议在生产性使用时使用sap.m.Table对象来创建表。它具有响应性,支持移动设备,并且在官方的Fiori应用程序中也得到了广泛的使用和维护。
  • 你的绑定工作正常。由于JSONModel默认设置为双向绑定(但是我应该看到项目的bootstrap部分以确保),输入中输入的数据会在模型中自动更新。因此,如果您想创建一个转发信息的发送按钮,您不必访问表,行甚至列;只需处理JSON模型。
  • //Input1.attachChange(function(oEvent) { var output = oEvent.getSource().getBindingContext().getPath(); alert('Text changed to : '+ output); console.log(output) }); 此事件处理程序提供一个oEvent对象,该对象包含新值本身(oEvent.getParameter("newValue"))。如果您想从分配给该字段的模型中检索该对象,请使用以下代码段:oTable.getModel().getProperty(output);

  • 您不必向表中添加列;它是由创建到行聚合的聚合绑定完成的。

  • CustomData用于将数据附加到(UI)元素并稍后检索(如隐藏属性)。您不必在此方案中使用它。
  • 在大多数情况下,绑定是一个不错的选择。稍后,您可以使用绑定和数据类型来验证表单;它也是一个很好的聚合解决方案(表行,列表元素等)。所以我建议使用它。

答案 1 :(得分:0)

您好nistv4n并感谢您的帮助!!!

当我打印/提醒值时,它是空白的。昨天晚上我找到了一个解决方法,我将放在这里。我所做的改变是首先使我的表本身可编辑(而不仅仅是列)。我不知道这是如何影响它的,但后来我添加了一个"添加"按钮,我只是使用push来将新的初始数据推送到我的数据域中,

类似于oPosData.push({PosItemA:" init"}); 然后我更新了将它与表格粘合的模型 oModel_Item.setData({modelData:oPosData}); 这迫使它创建一个新的行,我可以编辑我喜欢的方式,我能够通过简单的oPosData [我创建的行的索引]检索数据.PosItemI

每次按下添加按钮时我都使用了一个计数器,以便能够访问oPosData中的所有数据