我无法动态绑定我的表列和行。
假设我有两个模型,一个持有表列信息:
var aColumnData = [
{
columnId : "col1"
},
{
columnId : "col2"
},
{
columnId : "col3"
},
{
columnId : "col4"
},
{
columnId : "col5"
}
];
和一个有数据:
var aData = [
{
col1 : "Row 1 col 1",
col2 : "Row 1 col 2",
col3 : "Row 1 col 3",
col4 : "Row 1 col 4",
col5 : "Row 1 col 5"
},
{
col1 : "Row 2 col 1",
col2 : "Row 2 col 2",
col3 : "Row 2 col 3",
col4 : "Row 2 col 4",
col5 : "Row 2 col 5"
}
];
然后我设置了模型:
var oModel = new sap.ui.model.json.JSONModel();
oModel.setData({
columns : aColumnData,
rows : aData
});
然后我在视图中创建我的表:
var oTable = new sap.ui.table.Table();
var oColumnTemplate = new sap.ui.table.Column({
label : "{columnDesc}",
template : new sap.ui.commons.TextView().bindProperty("text", "<this_should_be_dynamic_but_how?>")
});
oTable.bindColumns("/columns", oColumnTemplate);
oTable.bindRows("/rows");
错误的部分是绑定到TextView模板中的当前列;这应该是动态的(“col1”,“col2”等)并且在运行中完成 - 这就是我认为的绑定 - 但我无法让它工作......
我想我错过了简单而琐碎的事情,但我现在有点迷失了...... 任何帮助都非常感谢!
==============================
编辑:我通过迭代列数组并使用addColumn()方法来实现它:
jQuery.each(aColumnData, function(i, v) {
oTable.addColumn(new sap.ui.table.Column({
label : v.columnDesc,
template: new sap.ui.commons.TextView().bindProperty("text", v.columnId)
}));
});
...但我希望使用bindColumns()/ bindRows()方法会有更清晰的方法:
答案 0 :(得分:20)
我在using factory functions之前做过类似的事情,看到jsbin example与你的类似例子
var oTable = new sap.ui.table.Table({
title: "Table column and data binding",
showNoData : true,
columnHeaderHeight : 10,
visibleRowCount: 7
});
oTable.setModel(oModel);
oTable.bindColumns("/columns", function(sId, oContext) {
var sColumnId = oContext.getObject().columnId;
return new sap.ui.table.Column({
id : sColumnId,
label: sColumnId,
template: sColumnId,
sortProperty: sColumnId,
filterProperty: sColumnId
});
});
oTable.bindRows("/rows");
您可以在此方案中使用2个全局命名的模型,一个用于数据的元数据 例如
sap.ui.getCore().setModel(oMetaModel, 'meta');
sap.ui.getCore().setModel(oDataModel, 'data');
..
oTable.bindColumns("meta>/columns" function...
oTable.bindRows("data>/rows");
下面是一个例子jsbin example of dynamic columns based on OData metadata