UI5 OData Search Help获取到响应但无法展示值问题求助
问题描述
我收到的OData响应如下:
我期望实现的效果是搜索帮助可以展示OData响应中的TypRolle、RolleNr和RolleOri列。目前我仅尝试展示其中TypRolle列就遇到了阻碍。
当前我的搜索帮助展示效果如下:
可以看到没有任何值被展示出来。
以下是我编写的valueHelpRequest方法代码:
var roletypeUrl = "my odata url"; var attModel = new sap.ui.model.json.JSONModel(); var link = this.getView().byId("roletype"); // roletype input field var oDataModel = new sap.ui.model.odata.v2.ODataModel(roletypeUrl, { json: true, loadMetadataAsync: true }); oDataModel.read("/ZshNsiAgr01xxlEinzelTypSet", { success: function(oData, response) { attModel.setData(oData); var oValueHelpDialog = new sap.m.Popover({ title: "Rollentyp auswählen", footer: [new sap.m.Button({ text: "Ok" })] }); oValueHelpDialog.openBy(link); var oItemTemplate = new sap.m.StandardListItem({ title: "test", description: "{TypRolle}" }); var oHelpTable = new sap.m.Table({ width: "300pt", columns: [ new sap.m.Column({ header: [ new sap.m.Label({ text: "Rollentyp" }) ] }) ], items: { path: "/results", template: oItemTemplate }, items: [ new sap.m.ColumnListItem({ cells: [ new sap.m.Text({ text: "{TypRolle}" }) ] }) ] }) oHelpTable.setModel(attModel); oValueHelpDialog.addContent(oHelpTable);
问题原因
Table的items属性被重复赋值,第一次配置的聚合绑定(路径+模板)被第二次写死的静态列项直接覆盖,导致数据无法绑定渲染- 混用了列表组件的
StandardListItem和表格组件的行模板ColumnListItem,表格的行模板必须使用ColumnListItem - Popover先执行
openBy再添加表格内容,容易出现渲染时序问题导致内容不展示 - 仅定义了一列,无法满足展示三个字段的需求
修复后代码
var roletypeUrl = "my odata url"; var attModel = new sap.ui.model.json.JSONModel(); var link = this.getView().byId("roletype"); // roletype input field var oDataModel = new sap.ui.model.odata.v2.ODataModel(roletypeUrl, { json: true, loadMetadataAsync: true }); oDataModel.read("/ZshNsiAgr01xxlEinzelTypSet", { success: function(oData, response) { attModel.setData(oData); // 先构造表格 var oHelpTable = new sap.m.Table({ width: "300pt", // 定义三列对应三个要展示的字段 columns: [ new sap.m.Column({ header: new sap.m.Label({text: "Rollentyp"}) }), new sap.m.Column({ header: new sap.m.Label({text: "RollenNr"}) }), new sap.m.Column({ header: new sap.m.Label({text: "RollenOri"}) }) ], // 配置聚合绑定,使用ColumnListItem作为行模板 items: { path: "/results", template: new sap.m.ColumnListItem({ cells: [ new sap.m.Text({text: "{TypRolle}"}), new sap.m.Text({text: "{RolleNr}"}), new sap.m.Text({text: "{RolleOri}"}) ] }) } }); oHelpTable.setModel(attModel); // 构造Popover var oValueHelpDialog = new sap.m.Popover({ title: "Rollentyp auswählen", content: [oHelpTable], footer: [new sap.m.Button({ text: "Ok", press: function() { oValueHelpDialog.close(); // 此处可补充选中行赋值给输入框的逻辑 } })] }); // 所有内容配置完成后再打开弹框 oValueHelpDialog.openBy(link); } })
内容的提问来源于stack exchange,提问作者doostaay
相关产品推荐
相关产品推荐

