SAPUI5 StandardListItem按选择排序

时间:2019-06-19 08:02:15

标签: javascript sapui5 sapui5-smarttable

我有一个弹出框的SelectDialog。在其中,我正在使用StandardListItem显示数据。

该列表显示了2000多个记录。但是,加载数据需要花费很多时间,因此我将阈值设置为50。当用户打开弹出窗口时,它将向下滚动显示前50条记录,下一组50条记录,依此类推。

现在,问题是当用户搜索记录(例如“ ABC”)时,此ABC可能位于列表中的位置500。他选择ABC,关闭弹出窗口,然后重新打开它,他看不到ABC(因为ABC不在前50个记录中)。他需要向下滚动6次才能查看数据。

我要实现的目标是,一旦用户选择了记录,它就会自动转到最高位置。 UI5 SelectDialog(UI5 Demo Kit)不提供此功能,因为它仅支持单向绑定。有什么帮助吗? 先谢谢了。

我的悲剧。XML代码:

<SelectDialog 
id="idSel" 
growingThreshold="50" 
growing="true"
showClearButton="true"
items="{data>AllItems}" 
multiSelect="true" 
noDataText="Not Found"
liveChange="handleSearch" 
title="Choose"
autoAdjustWidth="true" 
growingScrollToLoad="true">

     <StandardListItem id="idItem" description="{data>AllDataId})"
     title="{data>Title}" type="Active"/>

</SelectDialog>

2 个答案:

答案 0 :(得分:1)

您可以尝试设置 rememberSelections = true,以存储当前选择并在再次打开对话框时加载此状态。

<SelectDialog 
id="idSel" 
rememberSelections="true"
growingThreshold="50" 
growing="true"
showClearButton="true"
items="{data>AllItems}" 
multiSelect="true" 
noDataText="Not Found"
liveChange="handleSearch" 
title="Choose"
autoAdjustWidth="true" 
growingScrollToLoad="true">

     <StandardListItem id="idItem" description="{data>AllDataId})"
     title="{data>Title}" type="Active"/>

</SelectDialog>

答案 1 :(得分:1)

rememberSelections会保留选中/取消选中的选项,但“ ABC”仍将保持在第500位。我认为标准的sap.m.SelectDialog控件无法做到这一点。

不过,我看到了一些选择:

  • 如果从某个地方查询选择(OData?),则可以为此目的丰富或丰富选择的选项。然后将排序器添加到列表中,该列表按选择的最先排序(https://sapui5.hana.ondemand.com/#/api/sap.ui.model.Sorter)。一次读取列表数据时,您也可以在UI中执行此操作,但是由于性能原因,您已经说过要批量执行此操作。
  • 如果无法使用后端,则可以构建一个自定义控件,该控件基本上是一个sap.m.Dialog,其中两个sap.m.List彼此叠置以复制您描述的内容。顶部显示所选项目,然后底部显示标准列表。
  • 如果我们看看其他UI如何管理多选,则实际上是2个并排的列表。选择/取消选择只是将项目从一侧移到另一侧(之间的按钮或拖放)。这样,在寻找另一个要选择的内容时,您始终保留所选内容的上下文。我最近自己实施了此操作,以便从一长串的列表中选择多个选项。
  • 或者,不要在对话框上进行多重选择,而只是将选定的状态作为sap.m.Tokens保存在sap.m.MultiInput中。这可能是所有工作中最少的。