Преобразование xml combobox в представление javascript

Я новичок в OpenUI5, у меня есть поле со списком, созданное с использованием представления XML, поэтому теперь мне нужно создать такое же поле со списком, но в представлении JavaScript. Моя версия 1.58.2:

Мой код выпадающего списка xml выглядит следующим образом, и он работает:

 <ComboBox 
     id="departmentsDropDown"
     selectionChange="handleSelectionChange"
     items="{ path: 'departments>/' }"
     placeholder="{i18n>departmentSelect}" >     
     <core:Item key="{departments>name}" text="{departments>org_unit}" />  
</ComboBox>

Мой код просмотра JavaScript выглядит следующим образом, и он дает мне ошибку:

var comboBox = new sap.m.ComboBox(this.createId("departmentsComboBox"),{            
            items : "{ path: 'departments>/' }",
            selectionChange : oController.handleSelectionChange
});

Ошибка:

Missing template or factory function for aggregation items of Element sap.m.ComboBox#__jsview1--departmentsComboBox ! - 

есть ли у вас причина использовать JSviews? XML - стандартный дуэт по уважительной причине .... blogs.sap.com/2018/05/01/…

Erch 31.10.2018 12:03

@Erch да, я создаю дерево динамически (настраиваемое дерево) на основе доступных данных. Следовательно, мощность узлов моего дерева будет 0 ... n. XML-дерево не справится с этим.

21stking 31.10.2018 12:46
0
2
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На стороне javascript вам необходимо предоставить информацию о том, что делать с фактической строкой внутри поля со списком, то есть с шаблоном. В XML это предусмотрено; вы используете для этого core:Item. Он отсутствует на стороне javascript. Вот пример того, как это добавить:

new sap.m.ComboBox({
    selectedKey: '{model>/key}',
    showSecondaryValues: true,
    items: {
      path: '/Model',
      template: new sap.ui.core.ListItem({
        key: '{Key}',
        text: '{Key}',
        additionalText: '{Description}'
      })
    },
    change: _ => {
       //change logic
    }
  })

Это не совсем то же самое, но вам показано, как добавить шаблон. Вы обнаружите, что вам понадобится такая же логика для любого элемента управления с агрегацией, например списков или таблиц. Для более сложных элементов управления вы также можете использовать фрагмент.

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