SAPUI5过滤器表性能

时间:2019-01-15 14:08:14

标签: sapui5

我有一个包含3列的表格,最多可容纳6000个元素。在该表上方,我有一个SearchField。在SearchField中键入内容后,表格将按以下方式通过3列中的2列(使用liveChange)进行过滤:

var oTable = this.getView().byId("idMyTable");
var oBinding = oTable.getBinding("items");
oBinding.filter(new sap.ui.model.Filter([
                    new sap.ui.model.Filter("col1", sap.ui.model.FilterOperator.Contains, sInput),
                    new sap.ui.model.Filter("col2", sap.ui.model.FilterOperator.Contains, sInput),

                ], false), "Application");

尽管此解决方案有效,但完成(仅用于表中的6000个元素)需要大约 5秒,并且需要一点时间才能再次显示表中的数据。

填充表时,其大小限制设置为模型中数据的长度:

// rs0 is the result set of the db query which contains the data
tableModel.setSizeLimit(tableModel.getData().rs0.length);

当我省略对setSizeLimit的呼叫时,搜索速度很快,但是我无法滚动浏览表中的所有项目(不会显示所有内容)。

我的问题是:如何在表格中显示所有值并同时保持良好的搜索性能?

谢谢!

2 个答案:

答案 0 :(得分:1)

默认情况下,我认为sizeLimit设置为100,而表/列表的默认增长为20(这意味着它将仅显示20个元素,直到用户向下滚动并加载另一块20个元素)。

这是默认行为,因为否则会出现这种滞后问题。

我不知道是否有办法改善这种行为,但目前这是可能的最佳解决方案。

您可以做的是在OpenUI5 GitHub project上打开一个特定的问题并寻求建议。

答案 1 :(得分:0)

我终于找到了解决我问题的方法。现在,我在表本身上使用setSizeLimit属性,而不是在模型上使用grow。这允许我的表在用户向下滚动时按时间加载数据。因此,我的表声明现在看起来像这样:

<Table [...] visibleRowCountMode="Fixed" visibleRowCount="8" growing="true" 
    growingScrollToLoad="true" growingThreshold="100" threshold="100" >

grow属性在这里描述:

https://sapui5.netweaver.ondemand.com/1.30.7/docs/guide/9164ba7047b74a25a19baf9c5bb986ae.html

摘录(如果链接消失):

growing: Boolean to set the growing feature to on or off
growingScrollToLoad: If you want to allow more data to be fetched when the user scrolls down to the end of the current items, set this boolean property to true; otherwise a trigger button must be used
growingThreshold: The number of items that are requested each time from the model
growingTriggerText: The text on a trigger button used to cause a request for more data