2015-07-30 5 views
0

Я пытаюсь заполнить в выпадающем DropDownBox'е SAPUI5 из JSONобеспечение пустого параметра в поле со списком sapui5

 new sap.ui.commons.DropdownBox(this.createId('inpExpenseType'), { 
           selectedKey: '{ExpenseType/Id}', 
           editable: '{/CanEditPayment}', 
           required: "{/CanEditPayment}", 
           displaySecondaryValues: true, 
           items: { 
            path: 'parameters>/Benefits', 
            template: new sap.ui.core.ListItem(this.createId('liExpenseType'), { 
             key: '{parameters>Id}', 
             text: '{parameters>Name}', 
             additionalText: '{parameters>Code}' 
            }) 
           }, 
           layoutData: new sap.ui.layout.GridData({span: 'L6 M6 S6'}) 
          }).attachChange(oms.app.ModelUtils.handleListItemChange) 

Теперь на основе условия, например. if (status === 'Approved'), я хочу показать только один параметр в раскрывающемся списке. Я использовал фильтр ниже, чтобы сделать это.

if(state==='Approved'){ 
//this is the option I wish to display in the dropdownbox. 
     aFilters.push(new sap.ui.model.Filter("Id", sap.ui.model.FilterOperator.EQ, "33")); 
    } 
    odropdownbox.bindItems('parameters>/Benefits', oTemplate, null, aFilters); 

Теперь моя проблема заключается в том, что этот единственный вариант получения по умолчанию в выпадающем DropDownBox'е поэтому событие OnChange не будет срабатывать.

Я пытался по умолчанию пустого элемента, как показано ниже

if(State==='Approved'){ 
     var oItem = new sap.ui.core.ListItem({ 
      key: 'dummy', 
      text: '', 
      additionalText: '' 
     }); 
     odropdownbox.insertItem(oItem,0); 
     odropdownbox.setSelectedKey('dummy'); 
    } 

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

Как я могу это решить? Есть ли какой-то чистый способ манипулировать списком json?

+0

Можете ли вы попробовать 'odropdownbox.setValue ('')'? который установит значение равным –

+0

№ Даже это не поможет. Он по-прежнему по умолчанию имеет единственную опцию – Noufal

ответ

1

Не нужно добавлять новый товар.

Используйте fireChange после того, как вы связали предметы, чтобы у вас не возникло проблем.

odropdownbox.bindItems('parameters>/Benefits', oTemplate, null, aFilters); 
odropdownbox.fireChange(); 
+0

Я уже пробовал это. Я пытаюсь получить доступ к элементам, связанным с выпадающим списком в обработчике событий. Когда я делаю fireChange(), кажется, что getItems() возвращает нулевое значение. Поэтому, вероятно, событие будет запущено даже до того, как элементы завершили привязку. Есть ли способ проверить, завершено ли привязка, а затем запустить событие? – Noufal

+0

Использование отложенного объекта jQuery. Вы можете выполнять задачи после привязки –

+0

Должно быть событие после того, как привязка DropDownBox закончит загрузку элементов, которые я не смог найти. Теперь я делаю firechange() как первый шаг в следующем действии пользователя для этого конкретного условия. Это кажется странным, но, похоже, служит моей цели. – Noufal