SAPUI5 StandardListItem 按选定排序

SAPUI5 StandardListItem sort by selected

我有一个弹出窗口 SelectDialog。在里面,我使用 StandardListItem.

显示数据

列表显示超过2000条记录。但是,加载数据需要很多时间,所以我将阈值设置为 50。当用户打开弹出窗口时,它将显示前 50 条记录,一旦他向下滚动,下一组 50 条记录等等。

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

我要实现的是,一旦用户选择记录,它会自动转到顶部位置。 UI5 SelectDialog (UI5 Demo Kit) 不提供此功能,因为它仅支持 单向绑定。 对此有任何帮助吗?

我的fragement.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>

您可以尝试设置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>

rememberSelections 将保留选项 ticked/unticked 但 "ABC" 仍将位于位置 500。我认为标准 sap.m.SelectDialog 控件没有办法这个。

虽然我看到了几个选项:

  • 如果从某个地方(OData?)查询 selection,您可以通过是否为此目的 selected 来丰富读取的选项。然后向列表中添加一个排序器,该排序器首先按 selected (https://sapui5.hana.ondemand.com/#/api/sap.ui.model.Sorter) 排序。当一次读取列表数据时,您也可以在 UI 中执行此操作,但您已经说过出于性能原因,您正在分批执行此操作。
  • 如果操作后端不起作用,您可以构建一个自定义控件,该控件基本上是一个 sap.m.Dialog,其中 2 个 sap.m.Lists 相互叠加,以复制您所描述的内容。顶部显示 selected 项目,然后底部显示标准列表。
  • 如果我们看看其他 UI 是如何管理 multi-select 的,它实际上是 2 个列表 side-by-side。 Selecting/deselecting 只是将项目从一侧移动到另一侧(中间的按钮或拖放)。这样你在寻找另一个到 select 时总是保持 selected 的上下文。我最近自己实现了这一点,以便从长列表中选择多个选项。
  • 或者,不要在对话框中使用 multi-select,只需将 selected 状态保持在 sap.m.MultiInput 中,如 sap.m.Tokens。这可能是最少的工作。