You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UI5 OData Search Help获取到响应但无法展示值问题求助

问题描述

我收到的OData响应如下:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:57:02