如何避免Smart Table新增列时重复调用OData Service?
避免Smart Table添加列时重复调用OData Service的方法
关闭自动绑定,手动控制数据加载
Smart Table默认enableAutoBinding为true,表格结构变更(如新增列)会触发自动重新绑定。将该属性设为false,在控制器中一次性完成数据加载与绑定:<smartTable:SmartTable id="smartTable" enableAutoBinding="false" />控制器代码:
onInit: function() { const oSmartTable = this.byId("smartTable"); const oODataModel = this.getView().getModel(); // 一次性读取数据 oODataModel.read("/你的实体集名称", { success: (oResponse) => { oSmartTable.setModel(oODataModel); oSmartTable.bindRows("/你的实体集名称"); } }); }切换为客户端JSON模型缓存数据
先将OData服务返回的数据存入客户端JSON模型,再把Smart Table绑定到这个本地模型。后续新增列时直接读取本地数据,不会触发OData请求:onInit: function() { const oODataModel = this.getView().getModel(); const oClientModel = new sap.ui.model.json.JSONModel(); oODataModel.read("/你的实体集名称", { success: (oResponse) => { oClientModel.setData(oResponse); const oSmartTable = this.byId("smartTable"); oSmartTable.setModel(oClientModel); oSmartTable.bindRows("/results"); } }); }禁用结构变更时的自动重绑定
若使用UI5 1.72及以上版本,可设置rebindOnChange为false,阻止表格因列新增等结构变更触发重绑定:<smartTable:SmartTable id="smartTable" rebindOnChange="false" />提前预加载所需数据
确认新增列绑定的是已加载实体的属性,若涉及导航属性,需在首次加载时通过$expand预加载关联数据,避免后续触发额外请求:oODataModel.read("/你的实体集名称", { urlParameters: { "$expand": "需要预加载的导航属性名" }, success: (oResponse) => { // 绑定表格逻辑 } });
内容的提问来源于stack exchange,提问作者sguski
相关产品推荐
相关产品推荐

