带有动态列的UI5表

时间:2016-05-06 22:09:17

标签: sapui5 dynamic-columns

正如这里提到的Dynamic binding of table column and rows,我们使用两个模型,但如果我们有一个模型呢?

exampleJson

我想用5列(ol)来实现表格,但是使用这种方法,

exampleJson

我有5个重复的行,如下所示:

var aColumnData = [
        {
            qual : "1",
            ol:100
        },
        {
            qual : "2",
            ol:200
        },
        {
            qual : "3",
            ol:300
        },
        {
            qual : "2",
            ol:400
        },
        {
            qual : "5",
            ol:500
        }
    ];

而不是这个:

var myTable = new sap.ui.table.Table("mT");  
myTable.setModel(vizModel);  

myTable.bindColumns("/", function(index, context) {  

var sColumnId = context.getProperty().ol;  
  var xColumnId = context.getProperty().qual;  

return new sap.ui.table.Column({  
label: sColumnId , 
template: new sap.ui.commons.TextField ({value: xColumnId})
});  
});  
 myTable.bindRows("/"); 

1 个答案:

答案 0 :(得分:1)

好吧,您将聚合绑定到五个项目的数组。因此将创建五行,每行都有一个绑定上下文指向数组中的相应对象。对于每一行,克隆列的模板控件并将其放入行的单元格中。这些控件可以将其行的绑定上下文用于相对数据绑定路径(不包含前面的 / )。

在您的情况下,列模板 - TextField s - 各自具有静态值。因此,五行的克隆也将具有该静态值。

由于您的TextField值未受约束,用户的更改将不会写回模型。

如果你想拥有这种双向绑定,那么你必须将你的模型转换为一个具有许多属性的对象。

如果您只想拥有一行,则可以将行绑定到具有一个对象的虚拟数组,并在模板控件中使用绝对绑定路径。

myTable.bindColumns("/", function(index, context) {  

  var sColumnId = context.getProperty().ol;  
  var xColumnId = context.getProperty().qual;  

  return new sap.ui.table.Column({  
    label: sColumnId , 
    template: new sap.ui.commons.TextField ({value: { path: "/" + index + "/qual" } })
  });  
});  
myTable.bindRows("dummy>/");
myTable.setModel(new sap.ui.model.json.JSONModel([{}]) ,"dummy");