如何在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
相关产品推荐
相关产品推荐

