SAPUI5 StandardListItem сортировка по выбранному

У меня есть SelectDialog для одного из всплывающих окон. Внутри этого я отображаю данные, используя StandardListItem.

Список показывает более 2000 записей. Однако загрузка данных занимает много времени, поэтому я установил порог 50. Когда пользователь открывает всплывающее окно, он показывает первые 50 записей, когда он прокручивает вниз, следующий набор из 50 записей и так далее.

Теперь проблема заключается в том, что когда пользователь ищет запись (например, «ABC»), эта ABC может находиться в позиции 500 в списке. Он выбирает ABC, закрывает всплывающее окно, а затем снова открывает его, он не может видеть ABC (потому что ABC нет в первых 50 записях). Ему нужно прокрутить вниз 6 раз, чтобы увидеть данные.

Чего я хочу достичь, когда пользователь выбирает записи, он автоматически переходит на верхнюю позицию. UI5 SelectDialog (Демонстрационный набор UI5) не предоставляет эту функциональность, поскольку поддерживает только односторонняя привязка. Любая помощь по этому поводу?

Мой фрагмент.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>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
796
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать установить запомнитьПодборки = 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>

Это не работает, когда я просто загружаю начальные 50 записей, мне нужно загрузить все 1000 записей, чтобы это сработало.

Code_Tech 24.06.2019 12:57
Ответ принят как подходящий

rememberSelections сохранит/отключит параметры, но «ABC» все равно будет в позиции 500. Я не думаю, что стандартный элемент управления sap.m.SelectDialog имеет способ сделать это.

Хотя я вижу несколько вариантов:

  • Если выбор запрашивается откуда-то (OData?), вы можете обогатить прочитанные параметры тем, выбраны они или нет для этой цели. Затем добавьте в список сортировщик, который сначала сортирует выбранные (https://sapui5.hana.ondemand.com/#/api/sap.ui.model.Sorter). Вы также можете сделать это в пользовательском интерфейсе при одновременном чтении данных списка, но вы уже сказали, что делаете это партиями из соображений производительности.
  • Если манипулирование серверной частью не сработает, вы можете создать настраиваемый элемент управления, который в основном представляет собой sap.m.Dialog с двумя списками sap.m.List друг над другом, чтобы воспроизвести то, что вы описываете. Вверху отображаются выбранные элементы, затем внизу стандартный список.
  • Если мы посмотрим, как другие пользовательские интерфейсы управляют множественным выбором, на самом деле это 2 списка рядом. Выбор/отмена выбора — это просто перемещение элемента с одной стороны на другую (кнопки между ними или перетаскивание). Таким образом, вы всегда сохраняете контекст выбранного при поиске другого для выбора. Недавно я сам реализовал это для выбора нескольких вариантов из длинного списка.
  • В качестве альтернативы, не беспокойтесь о множественном выборе в диалоговом окне, а просто сохраните выбранное состояние в sap.m.MultiInput как sap.m.Tokens. Это, наверное, меньше всего работы.

Другие вопросы по теме