Как загрузить массив в раскрывающийся список внутри фрагментов с помощью SAPUI5?

Я пытался загрузить массив внутри фрагмента, но не смог перечислить значение, связанное с массивом, в раскрывающемся списке.

Первоначально я сохранил значения в пустой массив, а затем передал массив в модель json, чтобы вывести значения массива в раскрывающийся список.

Вот код для хранения значений массива и переданный в модель json:

 var value = oEvent.getSource().getParent().getBindingContext().getPath();
 var valueind = value.split("/");
 this.indexj = valueind[2];


var tabley = this.getView().byId("tablez");
var count = tabley.getItems().length;

 for (var i = 0; i < count; i++) {
 this.ops1 = tabley.getItems()[i].getCells()[0].getValue();

 this.objy= {

    "Opeartion": this.ops1,

 };

 console.log("this.objy", this.objy);
 empOper.push(this.objy);

 }//For Loop Closed

 console.log("empOper", empOper);


 this.objy = sap.ui.core.Fragment.byId("Operationsfragment", "operations");

 var seamoModelccd80 = new sap.ui.model.json.JSONModel(); 
 seamoModelccd80.setData({ 

 empOper: empOper

 });
 this.objy.setModel(seamoModelccd80);


console.log("this.objy", this.objy);
console.log("seamoModelccd80", seamoModelccd80);

Вот код для просмотра фрагментов:

  <ComboBox id="operations" value="{path='/empOper'}" editable="true" enabled="true" visible="true" width="auto" valueState="None"
 change="ChangOpera">
     <!--<core:Item text="{Name}"/>-->

   </ComboBox>

Вот снимок, которого я пытаюсь достичь:

введите здесь описание изображения

Любая помощь очень ценится, пожалуйста...

Согласно ответу @Voyager:

  var sValue = "";
 for (var i = 0; i < count; i++) {
    sValue = tabley.getItems()[i].getCells()[0].getValue();
   empOper.push({
   "Opeartion": sValue
   });
 }

 var seamoModelccd80 = new sap.ui.model.json.JSONModel(); // created a JSON model   
 seamoModelccd80.setData({ // Set the data to the model using the JSON object 
 defined already  

  empOper: empOper

  });

 var oView = this.getView();

 Fragment.load({
   name: "fragments.Operationsfragment.Operations",
   id: oView.getId(),
    controller: this
  }).then(
  function(oComboBox) {
   oView.addDependent(oComboBox);
   oComboBox.setModel(seamoModelccd80);
  }
 );
  <ComboBox id="operations" items="{path: '/empOper', templateShareable: 'false'}">
    <items>
       <core:ListItem key="{Name}" text="{Name}"/>
   </items>
 </ComboBox>

журнал моей консоли


person PvUIDev    schedule 03.09.2019    source источник


Ответы (2)


Вы должны правильно связать агрегацию элементов выпадающего списка и дать агрегации шаблон. Поскольку «элементы» не являются агрегацией ComboBox по умолчанию, вам необходимо специально написать тег агрегации (элементы). Привязка агрегации

<ComboBox id="operations" items="{path: '/empOper', templateShareable: 'false'}">
    <items>
        <core:ListItem key="{key}" text="{Operation}"/>
    </items>
</ComboBox>

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

var sValue = "";
for (var i = 0; i < count; i++) {
    sValue = tabley.getItems()[i].getCells()[0].getValue();
    empOper.push({
        "key": i,
        "Operation": sValue
    });
}

Вы должны правильно загрузить фрагмент. Требовать модуль (sap/ui/core/Fragment) в верхней части файла. Создание фрагмента

var oView = this.getView();

Fragment.load({
    name: "NAMESPACE.PATH.TO.Operationsfragment",
    id: oView.getId(),
    controller: this
}).then(
    function(oComboBox) {
        oView.addDependent(oComboBox);
        oComboBox.setModel(seamoModelccd80);
    }
);

Я думаю/надеюсь, что это решит все ваши проблемы.

person Voyager    schedule 03.09.2019
comment
Спасибо за ответ. Я обновил свой код, можете ли вы его проверить... теперь массивы дублируются, а в раскрывающемся списке отображается пустое значение. - person PvUIDev; 03.09.2019
comment
Также я приложил свой журнал консоли.. не знаю, где я делаю ошибки.. - person PvUIDev; 03.09.2019
comment
я отредактировал свой ответ, была ошибка. Обязательно исправьте опечатку в Operation внутри цикла и привязки шаблона ListItem (ключ и текст) внутри поля со списком. - person Voyager; 04.09.2019
comment
Как использовать это при вводе вместо id comboBox? - person PvUIDev; 04.09.2019
comment
Просто измените ComboBox на Input, items={path...} на SuggestionItems={path...} и ‹items› на ‹suggestionItems›. Пожалуйста, создайте новую тему для дальнейших вопросов, если на ваш первоначальный вопрос был дан правильный ответ. - person Voyager; 04.09.2019

Объявите модель JSON в манифесте без источника данных, затем установите данные в контроллере и привяжите свой ComboBox.

person ahmed ayad    schedule 03.09.2019