我需要在视图中设置 oData 绑定,以便默认情况下表(包含产品)的项目聚合处于“暂停”状态,直到我单击“恢复”绑定并加载到产品中的按钮。
示例在此 UI5 小技巧:Binding Suspend 的使用 | SAP 博客,但是当我尝试将其应用于表的项目聚合时,resume() 不执行任何操作,并且不会显示任何产品。
<Table id="productsTable"
items="{path: 'Products', suspended: true }"
onProductSearchAll: function (oEvent) {
const oView = this.getView();
const table = oView.byId("productsTable");
const binding = table.getBinding("items");
binding.resume();
} 目前,解决方法是不在视图中包含项目聚合,并在控制器中取消绑定/绑定项目聚合。
这是一个更麻烦的解决方案,因此最好确认为什么清洁器挂起/恢复解决方案在这种情况下失败。
聚合绑定信息属性
suspended
无论绑定path
是相对还是绝对都有效,并且适用于ListBinding
1的所有子类,例如v2.ODataListBinding
、v4.ODataListBinding
、JSONListBinding
2 如果没有另外记录。
如果您希望框架通过声明式聚合绑定来获取实体,但最初会被挂起:
仔细检查绑定是否确实是
ODataListBinding
的实例(例如通过this.byId("productsTable").getBinding("items").getMetadata().getName()
)。
首先确保绑定
path
实际上是正确的。
<Table id="productsTable" items="{
path: 'myODataModel>validRelativeOrAbsolutePath',
suspended: true,
templateShareable: false,
...: ...
}">
如果一切正确,如果
suspended
未定义或 false
,框架(不是任何控制器代码)将自动为您获取实体。使用 suspended: true
,当应用程序显式调用 this.byId("productsTable").getBinding("items").resume()
时,将首先发送请求。
示例: embed.plnkr.co/65HoSzWHdPnCzZZc
sap.ui.model.ListBinding
。旁注:与ListBinding
不同,TreeBinding
的子类不支持suspended
。请参阅 OpenUI5 问题 #3161。
2 虽然
suspended: true
在技术上由 JSONListBinding
支持,但与 V2 和 V4 ODataModel
等服务器端模型相比,JSONModel
是客户端模型,其中数据由手动应用程序代码。因此,与服务器端列表绑定相比,suspended: true
中JSONListBinding
的用例受到限制。