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

如何在SAPUI5自由风格应用中禁用OData初始加载?

SAPUI5自由风格应用禁用初始OData加载的实现方法

在SAPUI5自由风格应用中,没有Fiori Elements那样直接的initialLoad属性,但可以通过以下几种实用方式实现禁用页面加载时的OData请求,按需触发数据加载:

方法一:延迟绑定初始化+控制模型绑定模式

  • 初始化OData模型时,先避免直接绑定到列表,同时调整默认绑定模式防止自动触发请求:
    // 初始化OData模型,设置默认绑定模式为单向
    const oODataModel = new sap.ui.model.odata.v2.ODataModel({
      serviceUrl: "/your/odata/service/path",
      defaultBindingMode: "OneWay"
    });
    this.getView().setModel(oODataModel);
    
    // 初始状态下给列表绑定空数据或清空模型
    const oList = this.getView().byId("yourTargetList");
    oList.setModel(null);
    
  • 当用户选择筛选条件或点击"显示全部"时,再执行绑定并触发请求:
    onFilterConfirmed: function(oEvent) {
      const oList = this.getView().byId("yourTargetList");
      const oModel = this.getView().getModel();
      oList.setModel(oModel);
    
      // 构建筛选条件(示例为等于匹配)
      const oFilter = new sap.ui.model.Filter({
        path: "TargetField",
        operator: sap.ui.model.FilterOperator.EQ,
        value1: oEvent.getSource().getValue()
      });
    
      // 绑定列表并应用筛选,触发OData请求
      oList.bindItems({
        path: "/YourEntitySet",
        filters: [oFilter],
        template: new sap.m.StandardListItem({
          title: "{TargetField}"
        })
      });
    }
    

方法二:手动调用loadData触发请求

  • 初始状态下列表绑定空数据集,待用户操作后手动加载数据并绑定:
    // 初始给列表绑定空的JSON模型
    const oEmptyModel = new sap.ui.model.json.JSONModel({ results: [] });
    const oList = this.getView().byId("yourTargetList");
    oList.setModel(oEmptyModel);
    oList.bindItems({
      path: "/results",
      template: new sap.m.StandardListItem({ title: "{TargetField}" })
    });
    
    // 用户触发加载时执行请求
    onLoadDataManually: function(oEvent) {
      const oODataModel = this.getView().getModel();
      const sFilterVal = oEvent.getParameter("value");
      // 拼接带筛选条件的OData路径
      const sRequestPath = `/YourEntitySet?$filter=TargetField eq '${sFilterVal}'`;
    
      oODataModel.loadData(sRequestPath, null, false, "GET", false, false, (oResponseData) => {
        // 将返回数据更新到列表绑定
        oList.getModel().setData(oResponseData.d);
      }.bind(this));
    }
    

方法三:修改绑定参数控制初始请求

  • 如果视图中已定义绑定,可通过operationMode参数初始禁用服务器请求,后续切换触发:
    <!-- 视图中列表初始设置为客户端模式,不触发服务器请求 -->
    <List id="yourTargetList" items="{
      path: '/YourEntitySet',
      parameters: {
        operationMode: 'Client'
      }
    }">
      <StandardListItem title="{TargetField}" />
    </List>
    
    onTriggerServerLoad: function() {
      const oList = this.getView().byId("yourTargetList");
      const oItemBinding = oList.getBinding("items");
      // 切换为服务器模式,添加筛选条件并强制刷新触发请求
      oItemBinding.setParameters({
        operationMode: "Server",
        filters: [new sap.ui.model.Filter("TargetField", "EQ", "selectedValue")]
      });
      oItemBinding.refresh(true);
    }
    

注意事项

  • 若需保留双向绑定,可在数据加载完成后将模型绑定模式切换回TwoWay。
  • 手动拼接OData筛选条件时,注意字符转义避免语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:35:22