sap.m.MultiComboBox: Как получить тексты из всех выбранных элементов?

#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 of MultiComboBox . Выбор из выпадающего списка автоматически обновит 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);
},