In an XML view, I present a sap.m.Table
with entries from an output ODataModel. Now the first 8 entries should be output for about 5 seconds and the remaining entries automatically reload, and switch in 5 second intervals, like a dashboard.
Here is an example: I have 30
entries.
1
to 8
.9
to 16
.17
to 24
.25
to 30
.Would you have any idea how I can do that? Could it possibly realized on the routing function with transfer of the required parameters to the URL?
答案 0 :(得分:1)
我已经制作了一个Plunker来演示如何实现这一目标:Plunker Demo。
简而言之,您可以利用ManagedObject#bindAggregation方法的startIndex
和length
参数。更具体地说,您可以使用它们重复绑定表。
this.byId("list").bindItems({
path: "/Meetups",
template: this.byId("template"),
templateShareable: true,
startIndex: start,
length: SLICE_SIZE
});
因为您不断重新绑定表,所以您只需在{...}}的XML视图中创建模板对象,然后就可以通过dependent
访问它了。我们需要使用this.byId(...)
标志来指示模板将在进一步的绑定中重复使用(在下一个标记中)。
templateShareable
关于路由,我做了两个路由:一个路由("默认")路由和一个指定起始索引的路由(" withStart")。他们俩都指向同一个观点。
<dependents>
<StandardListItem id="template" title="{Title}"
description="{Description}" counter="{MeetupID}" />
</dependents>
&#34;切片之间的过渡&#34;在jQuery.sap.delayedCall的帮助下完成。您也可以使用IntervalTrigger,但如果视图不是第一个显示的话,它可能会导致一些问题(因为第一个&#34;切片&#34;可能不会显示整整5秒,具体取决于当然你如何实现它。)
"routes": [{
"pattern": "",
"name": "default",
"target": "main"
}, {
"pattern": "/{start}",
"name": "withStart",
"target": "main"
}]
然后发生勾号(即当我们需要更改&#34;切片&#34;)时,我们只需导航到jQuery.sap.delayedCall(INTERVAL, this, this.onTick, [start]);
路径并递增withStart
索引参数。此时,我们还可以检查是否需要再次从零开始(如果起始索引大于总计数)。
start
为了找出总计数(以确定是否应该归零),您可以使用列表/表ListBinding中的信息。
start += SLICE_SIZE;
if (this.count && start >= this.count) {
start = 0;
}
this.getOwnerComponent().getRouter().navTo("withStart", {start: start});
您可能在多视图应用程序中遇到的一个问题是,如果用户在您的&#34;仪表板之间导航&#34;查看和其他一些视图, var oBinding = this.byId("list").getBinding("items");
if (oBinding.isLengthFinal()) {
this.count = oBinding.getLength();
}
可能会导致您再次导航回&#34;信息中心&#34;视图(即用户可能会在仪表板中获得&#34;陷阱&#34;)。为避免这种情况,您可以在进行delayedCall
调用之前检查视图是否可见。
为了提高加载时间的性能,您可以使用两种不同的方法:
navTo
将在客户端一次加载所有条目,并且分页机制将在没有进一步请求的情况下完成(至少在理论上)。Client
this.byId("list").bindItems({
path: "/Meetups",
template: this.byId("template"),
templateShareable: true,
startIndex: start,
length: SLICE_SIZE,
operationMode: OperationMode.Client
});