动态绑定sap.m.Table项时遇‘缺少聚合项模板/工厂函数’错误
解决sap.m.Table绑定数据时的"Missing template or factory function"错误
这个错误很常见,本质是sap.m.Table的items聚合需要明确知道怎么渲染每一行数据——你要么给它一个模板(template),要么用工厂函数,既然你不想用工厂函数,那咱们就把模板配置好就行。
从你给出的代码来看,目前只定义了表头和列结构,但完全没配置items的模板部分,这就是问题的核心。下面是修改后的完整视图代码,我帮你补全了缺失的关键部分:
<Table id="favTable" items="{/favoriteServices}"> <!-- 替换成你实际的数据集合绑定路径 --> <headerToolbar> <Toolbar> <Title id="tableHeader" text="{i18n>tableHeader}"/> </Toolbar> </headerToolbar> <columns> <Column> <Label text="{i18n>serviceNameColText}" /> </Column> <!-- 示例:假设你还有状态列,可根据实际需求调整 --> <Column> <Label text="{i18n>serviceStatusColText}" /> </Column> </columns> <!-- 关键:添加行模板,与列结构一一对应 --> <items> <ColumnListItem> <cells> <!-- 第一个单元格对应第一列,绑定服务名字段 --> <ObjectIdentifier title="{serviceName}" /> <!-- 第二个单元格对应第二列,绑定状态字段 --> <Text text="{serviceStatus}" class="{= ${serviceStatus} === '维护中' ? 'sapUiNegative' : '' }" /> </cells> </ColumnListItem> </items> </Table>
几个需要注意的关键点:
数据绑定路径要匹配:
items="{/favoriteServices}"里的路径必须和你ViewModel/Model中的数据集合路径一致。比如你的Model数据结构是:{ "favoriteServices": [ { "serviceName": "用户管理服务", "serviceStatus": "正常" }, { "serviceName": "订单处理服务", "serviceStatus": "维护中" } ] }那这个路径就是正确的。
模板与列数量一致:
<ColumnListItem>里的<cells>数量必须和你定义的<columns>数量完全对应,每个单元格里可以放任意sap.m控件(Text、ObjectIdentifier、Button等),并绑定对应的数据字段。确保Model正确初始化:在控制器里要把数据Model绑定到视图上,比如:
onInit: function() { const oServiceModel = new sap.ui.model.json.JSONModel(); // 这里可以替换成加载后端数据的逻辑 oServiceModel.setData({ favoriteServices: [/* 你的数据数组 */] }); this.getView().setModel(oServiceModel); }
只要按上述方式配置好行模板,并且数据绑定路径正确,这个错误就会消失,表格也能正常渲染出数据行。
内容的提问来源于stack exchange,提问作者Pille
相关产品推荐
相关产品推荐

