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

SAP UI5中oDialog内sap.m.List触发itemPress切换模型显示空白问题

问题原因与解决方案

核心问题梳理

  • 模型绑定路径未匹配命名模型:你调用setModel时给新模型指定了名称"Model" + sPath,属于命名模型,但后续bindItems的path直接写"/",默认指向未命名的默认模型(也就是第一次绑定的主分类模型),自然无法匹配到新模型的数据,所以显示空白。
  • BindingContext构造逻辑错误:setBindingContext时你把模型名直接拼接在路径里的写法不符合SAPUI5规范,正确的Context构造仅需传入相对该模型的路径,命名模型需要在调用setBindingContext时单独传第二个参数指定模型名。
  • loadData参数使用错误:XMLModel.loadData的第二个参数是请求参数对象,你错误地将模型名作为入参传入,可能导致请求异常,即使你用的同步请求也存在参数传递风险。

修正方案

简化方案:直接使用默认模型(推荐)

无需使用命名模型,直接覆盖列表的默认模型即可,逻辑更简洁:

// 保留itemPress内原有前置逻辑
var sURL = '/XMII/Runner?Transaction=Project/trasnaction&param1=' + param1;
var oModel3 = new sap.ui.model.xml.XMLModel();
// loadData参数依次为:请求地址、请求参数、是否异步,不需要传参则第二个参数设为null
oModel3.loadData(sURL, null, false);

// 直接覆盖列表默认模型,替换原有主分类模型
oList.setModel(oModel3);
// 直接绑定对应数据节点路径
oList.bindItems({
    path: "/serviceInvocationResponse/responses",
    templateShareable: false,
    template: oTemplate
});

// 验证逻辑可正常读取数据
var newData = oList.getModel().getProperty("/");
console.log("newData: ", newData);

保留命名模型的修正写法

如果需要保留命名模型,需在绑定路径中显式指定模型名:

var sModelName = "Model" + sPath;
var sURL = '/XMII/Runner?Transaction=Project/trasnaction&param1=' + param1;
var oModel3 = new sap.ui.model.xml.XMLModel();
oModel3.loadData(sURL, null, false);

oList.setModel(oModel3, sModelName);
// 绑定路径添加模型名前缀
oList.bindItems({
    path: sModelName + ">/serviceInvocationResponse/responses",
    templateShareable: false,
    template: oTemplate
});

额外注意事项

SAPUI5 1.44版本属于老旧维护版本,同步XMLHttpRequest在部分现代浏览器中已存在废弃警告,条件允许的话建议改为异步请求,在requestCompleted事件回调中执行绑定逻辑,避免主线程阻塞。

内容的提问来源于stack exchange,提问作者DirtyFrank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:15:07