表列和行的动态绑定

Qua*_*ure 14 sapui5

我遇到麻烦,我的表列和行的动态绑定工作.

假设我有两个模型,一个持有表列信息:

    var aColumnData = [
        {
            columnId : "col1"
        },
        {
            columnId : "col2"
        },
        {
            columnId : "col3"
        },
        {
            columnId : "col4"
        },
        {
            columnId : "col5"
        }
    ];
Run Code Online (Sandbox Code Playgroud)

和一个数据:

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"
    }
];
Run Code Online (Sandbox Code Playgroud)

然后我设置模型:

    var oModel = new sap.ui.model.json.JSONModel();
    oModel.setData({
        columns : aColumnData,
        rows    : aData
    });
Run Code Online (Sandbox Code Playgroud)

然后我在视图中创建我的表:

    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");
Run Code Online (Sandbox Code Playgroud)

让我烦恼的部分是绑定到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) 
        })); 
    });
Run Code Online (Sandbox Code Playgroud)

...但我希望使用bindColumns()/ bindRows()方法会有更清晰的方法:

Jas*_*_07 20

我在使用工厂函数之前做了类似的事情,请参阅jsbin示例,了解与您类似的示例

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");
Run Code Online (Sandbox Code Playgroud)

您可以在此场景中使用2个全局命名的模型,一个用于数据的元数据,例如

sap.ui.getCore().setModel(oMetaModel, 'meta');
sap.ui.getCore().setModel(oDataModel, 'data');
..
oTable.bindColumns("meta>/columns" function...
oTable.bindRows("data>/rows");
Run Code Online (Sandbox Code Playgroud)

下面是基于OData元数据的动态列的示例jsbin示例

  • 优秀的@Jasper_07,就像一个魅力!你是一个真正的生活**和**节省时间!:-) (2认同)