我有一个要求,我需要将列表项的数量更新为Page的子标题。我想使用sap.ui.base.EventProvider
,聚合绑定或表达式绑定。请告诉我,因为我以前从未使用过它。
如果我删除了一个列表项,列表项的数量应该是实时更新。
答案 0 :(得分:1)
当使用客户端模型(如JSONModel)时,一个简单的表达式绑定就足够了:
title="{= ${myModelName>/myProducts}.length}"
示例: https://embed.plnkr.co/NGnnqI/
正如您在上面的示例中所看到的,当更改项目数时,框架会通知expression binding,由于OneWay绑定,它最终会自动更新属性值。
在这种情况下,它并不像上面的方法那么简单,因为表达式绑定在这里不适用(参见下面的推理)。但是,我们仍然可以通过以下方法方便地更新项目数量:
updateFinished
事件
特别是如果启用了增长功能,此事件会派上用场,以便始终获得框架分配给事件参数total
的新计数值。
如果
total
属性设置为growing
,则可以使用[参数true
]。
示例:https://embed.plnkr.co/pVsUr5/
<List
growing="true"
items="{/Products}"
updateFinished=".onUpdateFinished"
>
onUpdateFinished: function(event) {
const reason = event.getParameter("reason"); // "Filter", "Sort", "Refresh", "Growing", ..
const count = event.getParameter("total"); // Do something with this $count value
// ...
},
在控件更新和处理项绑定后触发updateFinished
事件。事件参数"total"
提供根据过滤,排序等操作请求的$count
值。
change
事件
此事件可应用于任何绑定,这些绑定会派上用场,特别是如果控件不支持updateFinished
事件。
someAggregation="{
path: '/Products',
events: {
change: '.onChange'
}
}"
onChange: function(event) {
const reason = event.getParameter("reason"); // See: sap.ui.model.ChangeReason
const count = event.getSource().getLength();
// ...
},
event.getSource()
返回对应的(List)Binding对象,其结果为$count
(或$inlinecount
)stored internally。我们可以通过调用public API getLength()
来获得该计数结果。"growing"
原因。但是如果控件可以增长,它可能来自ListBase,无论如何支持updateFinished
事件。如果根本没有列表绑定,但仍需要计数值,我们总是可以手动发送请求以获取计数值。为此,请将系统查询$count
附加到read方法中的路径:
myODataModel.read("/Products/$count", {
success: function(data) {
const count = +data; // "+" parses the string to number.
// ...
}.bind(this),
})
${myODataModel>/Products}
或myODataModel.getProperty("/Products")
会产生 undefined
(除非路径是相对的;例如导航属性,相反,{{ 3}})。length
也不会代表整个实体集的完整大小,而是可以通过$top
&amp;部分下载的大小。 $skip
/增长功能,不代表集合中的项目总数!请查看文档主题results in an array
答案 1 :(得分:0)
我猜“MyListModel”是你的模型名称,在里面你有这样的东西:
[
{objectName: "object1"},
{objectName: "object2"},
{objectName: "object3"}
]
然后尝试:
<Page title="{= ${myListModel>/}.length}">