#sapui5
#sapui5
Вопрос:
После selectionFinish
этого я хотел бы получить все тексты выбранных элементов из списка. Обычный подход к получению всех выбранных элементов выглядит следующим образом:
this.byId("idExampleMultiComboBox").getSelectedItems();
Проблема: он возвращает объекты типа sap.ui.core.Item
со всеми агрегациями / ассоциациями. Мне нужен только текст выбранной опции.
MultiComboBox:
<MultiComboBox id="idExampleMultiComboBox"
items="{modelExample>/}"
selectionFinish=".onSelectionFinish">
<core:ListItem text="{modelExample>Option}" />
</MultiComboBox>
let modelExample = {
0: { "Option": "ExampleOption1" },
1: { "Option": "ExampleOption2" }
};
Один подход:
onSelectionFinish: function(oEvent){
let aSelectedCriteria = [];
let i = 0;
while (i < oEvent.getSource().getSelectedItems().length) {
aSelectedCriteria.push(oEvent.getSource().getSelectedItems()[i].getText())
i = i 1;
}
},
Вопрос: Как получить выбранные элементы в виде текста из списка?
Комментарии:
1. Что бы вы сделали с кучей текстов? Чего вы пытаетесь достичь? Обычно записи должны иметь однозначно идентифицируемые значения, которые должны быть привязаны к
key
of(List)Item
, а затем кselectedKeys
ofMultiComboBox
. Выбор из выпадающего списка автоматически обновитselectedKeys
свойство благодаря привязке TwoWay. Затем вы можете получить доступ к выбранным ключам из любого места без необходимости проходить через контрольную ссылку или без необходимости прослушиванияselectionFinish
.2. @BoghyonHoffmann, дело в том, что selectedKeys=»», должен быть объявлен в первую очередь с привязкой к нему модели. Если привязка twoway будет работать, если она уже привязана к модели, я хотел этого избежать. Что бы вы сделали с кучей текстов? — Нужно было, чтобы у него был массив со всеми выбранными параметрами в виде строк / текстов, а не объектов.
Ответ №1:
Моя рекомендация: используйте метод Array.prototype.map для создания массива всех текстов. Это просто ваш подход с более удобным методом.
onSelectionFinish: function(oEvent) {
const aSelectedItems = oEvent.getParameter("selectedItems");
const aSelectedTexts = aSelectedItems.map(oItem => oItem.getText());
},
Другим подходом было бы получить только выбранные ключи, а затем выполнить цикл по вашей модели.
onSelectionFinish: function(oEvent) {
// There are multiple ways to retrieve your model
const oModel = oEvent.getSource().getBinding("items").getModel();
const aSelectedKeys = oEvent.getSource().getSelectedKeys();
const aSelectedCriteria = aSelectedKeys.map(sKey => oModel.getProperty("/" sKey);
},