Data binding 如何在子ListBinding(聚合绑定)的大小更改后自动更新ContextBinding(元素绑定)?

Data binding 如何在子ListBinding(聚合绑定)的大小更改后自动更新ContextBinding(元素绑定)?,data-binding,odata,sapui5,Data Binding,Odata,Sapui5,注意:为了演示以下问题,我创建了一个。在这里,我使用了一个模拟服务器,因为。然而,这个问题在实际服务器上也是可以重现的 目前,我正在通过导航属性将子集合绑定到相对于扩展的单个实体的列表。大概是这样的: <Page title="Products" binding="{ path: 'odataModel>/BusinessPartnerSet(\'0100000000\')', parameters: { expand: 'ToProducts'

注意:为了演示以下问题,我创建了一个。在这里,我使用了一个模拟服务器,因为。然而,这个问题在实际服务器上也是可以重现的


目前,我正在通过导航属性将子集合绑定到相对于扩展的单个实体的列表。大概是这样的:

<Page title="Products"
  binding="{
    path: 'odataModel>/BusinessPartnerSet(\'0100000000\')',
    parameters: {
      expand: 'ToProducts'
    }
  }"
>
  <List items="{odataModel>ToProducts}">
    <StandardListItem title="{odataModel>ProductName}" />
  </List>
</Page>

现在,如果我从列表中删除一个项目,ListBinding将发送一个包含delete和GET的批处理请求。以下是
batchRequestSent
事件的屏幕截图:

已删除的项将从ListBinding中消失,列表将按预期更新。如果我有一个具有相同绑定的附加列表,那么由于双向数据绑定(如上面的Plunker示例),该附加列表也会得到更新。到目前为止还不错

问题 但问题是:父级(在本例中是页面的元素绑定)没有更新。如果调用
bindingContext.getProperty(“ToProducts”)
,它将返回一个绑定路径列表,其中已删除的项仍然存在。我猜这是因为没有从ContextBinding发送GET请求,而只是从ListBinding发送

我的问题 如果更改发生在子ListBinding中(通过删除或创建),那么父ContextBinding如何获得有关更改的通知并在不发送额外请求的情况下更新自身,以便
bindingContext.getProperty(“TopProducts”).length
始终返回正确的长度

或者不同的是,当发生更改时,我如何防止UI5从子ListBinding发送GET请求,而让它从父ContextBinding发送请求,以便更改之后自动传播到子ListBinding

UI5中是否有解决此类问题的标准方法



PS:同样的问题不适用于基于JSON的绑定。它似乎只是OData。

要阻止框架在删除后进行“GET”调用,可以在sap.ui.model.OData.v2.ODataModel上使用属性“refreshAfterChange”,该属性可以设置为“false”


“删除”成功后,您可以“刷新”页面上的绑定,以便所有绑定保持一致

如果有人遇到同样的问题:结果是一个问题

[FIX]ODataListBinding:更新扩展列表数组

如果此修复程序在当前版本中不可用,一种解决方法是通过调用
parentControl.getElementBinding(“modelName”).refresh(false,“yourderedgroupid”)
来访问父绑定,以便在单个批处理请求中可以将GET请求与DELETE请求一起发送


此外,我们可以关闭
refreshAfterChange
(as),这样UI5就不会为相应的ListBinding(相对绑定和绝对绑定)追加其他GET请求。这种方法的一个缺点是,绝对绑定的ListBinding(与相对绑定的ListBinding具有相同的内容)也必须手动刷新-如果有的话。

谢谢您的建议。原来是一个已经修好了的问题。因此,如果你同意,我将删除我的问题。如果其他人遇到它,也许你可以保持原样?。你可以回答你的问题并将其标记为正确答案。