实时更新项目数量

Sub*_*nti 4 sapui5

我有一个要求,需要将列表项的数量实时更新到页面的子标题。我想要 use sap.ui.base.EventProvider、聚合绑定或表达式绑定。请引导我完成,因为我以前从未使用过它。

如果我删除列表项,列表项的数量应该实时更新。

Bog*_*ann 5

客户端模型

如果使用诸如此类的客户端JSONModel模型(即假设所有数据已在客户端上可用)并且目标集合是 array 则简单的表达式绑定就足够了:

title="{= ${myJSONModel>/myProducts}.length}"
Run Code Online (Sandbox Code Playgroud)

正如您在上面的示例中看到的,当项目数量发生变化时,框架会通知表达式绑定,最终会自动更新属性值。

服务器端模型(例如OData)

奥数据V2

使用apiupdateFinished中的事件sap.m.ListBase

特别是如果启用了增长功能,此事件会派上用场,始终获取框架分配给事件参数的新计数值total

如果该属性设置为 ,total则可以使用[参数] 。growingtrue

title="{= ${myJSONModel>/myProducts}.length}"
Run Code Online (Sandbox Code Playgroud)
<List
  growing="true"
  items="{/Products}"
  updateFinished=".onUpdateFinished"
>
Run Code Online (Sandbox Code Playgroud)

updateFinished事件在控件更新并处理项目绑定后触发。事件参数提供根据过滤、排序等操作请求"total"的值。$count

使用apichange中的事件sap.ui.model.Binding

此事件可以应用于任何派上用场的绑定,尤其是在控件不支持该updateFinished事件的情况下。

onUpdateFinished: function(event) {
  const reason = event.getParameter("reason"); // "Filter", "Sort", "Refresh", "Growing", ..
  const count = event.getParameter("total"); // Do something with this $count value
  // ...
},
Run Code Online (Sandbox Code Playgroud)
someAggregation="{
  path: '/Products',
  events: {
    change: '.onChange'
  }
}"
Run Code Online (Sandbox Code Playgroud)

手动触发(仅限V2)

如果根本没有列表绑定但仍然需要计数值,我们始终可以手动发送请求来获取计数值。为此,将系统查询附加$count到读取方法中的路径中:

onChange: function(event) {
  const reason = event.getParameter("reason"); // See: sap.ui.model.ChangeReason
  const count = event.getSource().getLength();
  // ...
},
Run Code Online (Sandbox Code Playgroud)

奥数据V4

请查看文档主题Binding Collection Inline Count