我正在使用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。