SAPUI5 挂起/恢复 o数据绑定未触发

问题描述 投票:0回答:1

我需要在视图中设置 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();

} 目前,解决方法是不在视图中包含项目聚合,并在控制器中取消绑定/绑定项目聚合。

这是一个更麻烦的解决方案,因此最好确认为什么清洁器挂起/恢复解决方案在这种情况下失败。

odata sapui5
1个回答
0
投票

聚合绑定信息属性

suspended
无论绑定
path
是相对还是绝对都有效,并且适用于
ListBinding
1
的所有子类,例如
v2.ODataListBinding
v4.ODataListBinding
JSONListBinding
2 如果没有另外记录。

如果您希望框架通过声明式聚合绑定来获取实体,但最初会被挂起:

  1. 仔细检查绑定是否确实是

    ODataListBinding
    的实例(例如通过
    this.byId("productsTable").getBinding("items").getMetadata().getName()
    )。

  2. 首先确保绑定

    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


1 API 参考:

sap.ui.model.ListBinding
。旁注:与
ListBinding
不同,
TreeBinding
的子类支持
suspended
。请参阅 OpenUI5 问题 #3161

2 虽然

suspended: true
在技术上由
JSONListBinding
支持,但与 V2 和 V4
ODataModel
等服务器端模型相比,
JSONModel
是客户端模型,其中数据由手动应用程序代码。因此,与服务器端列表绑定相比,
suspended: true
JSONListBinding
的用例受到限制。

© www.soinside.com 2019 - 2024. All rights reserved.