我有一个包含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
的呼叫时,搜索速度很快,但是我无法滚动浏览表中的所有项目(不会显示所有内容)。
我的问题是:如何在表格中显示所有值并同时保持良好的搜索性能?
谢谢!
答案 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