我正在使用XML视图在SAPUI5项目中创建视图。我试图实现工厂功能以用于sap.ui.Table控件的“列和行”。列工厂似乎运行良好,但由于某种原因,行工厂从未执行过。

视图:

<Table
    id="dataPreviewTbl"
    class="data-preview"
    columns="{path: 'oModel>/columns', factory: '.colFactory'}"
    rows="{path: 'oModel>/rows', factory: '.rowFactory'}" >
</Table>


控制器:

colFactory: function(sId, oContext) {
    var sColumnId = oContext.getObject().name;
    var multiLabels = [];
    multiLabels.push(
        new sap.m.Label({
            text: sColumnId,
            design: "Bold"
        })
    );
    multiLabels.push(
        new sap.m.Label({
            text: dataType
        })
    );
    return new sap.ui.table.Column({
        multiLabels: multiLabels,
        sortProperty: sColumnId,
        filterProperty: sColumnId,
        flexible: false
    });
},

rowFactory: function(sId, oContext) {
    var cells = [];
    for (let i = 0; i < this.colCount; i++) {
        cells.push(new sap.m.Text({
            "text": "{oModel>" + i + "}"
        }));
    }

    return new sap.ui.table.Row({
        "cells": cells
    });
}


我已经根据特定要求实现了行和列的动态绑定。有人可以在这里建议或帮助我吗?可以让我开始思考缺失或错误的地方。谢谢。

最佳答案

抱歉。 sap.ui.table.Table使用工厂功能intentionally left out来处理大量数据(根据我的经验,即使在Chrome上,sap.m.Table也无法流畅地处理)。 sap.ui.table.Table之所以能够做到这一点,是因为它在用户滚动时会重用其DOM元素,这与工厂功能的工作方式不同。

如果您确实需要使用工厂函数,那么恐怕除了实现sap.m.Table之外,别无其他方法(尽管性能会受到影响,尤其是在客户端严重依赖IE的情况下)。
如果不是,请在“列”控件中定义templates

09-10 11:04
查看更多