正如这里提到的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("/");
答案 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");