如何将组合框的输入设置为只读

时间:2019-05-03 12:30:45

标签: sapui5

在我的一个UI5-Dialogs中,我实现了一个组合框,该组合框在最初加载屏幕时不可见。 在方法onAfterRendering中,我首先将输入设置为只读:

onAfterRendering: function(oEvent) {
  var oShovel = this.getView("View0200").byId("comboShovel");
  oShovel.$().find("input").attr("readonly", true);
  this.setVisibleByListKey();
},

此后调用方法setVisibleByListKey,属性visibleShovel将设置为false。

setVisibleByListKey: function(oEvent) {
  var oModel = this.getView("View0200").getModel("Data0200");
  this.setVisibleByListKey1(oModel);
  // ...
},

setVisibleByListKey1: function(oModel) {
  oModel.setProperty("/visibleShovel", false);
},

该属性绑定到组合框上可见的属性。 由于这种行为,将再次调用方法onAfterRendering,属性readonly不可用(由于不可见)。

<ComboBox id="comboShovel"
  editable="true"
  enabled="true"
  visible="{Data0200>/visibleShovel}"
  valueState="None"
  change=".changeCombo">
  <items>
    <core:Item text="Ja" enabled="true" key="0" />
    <core:Item text="Nein" enabled="true" key="1" />
    <core:Item text="Nicht erforderlich" enabled="true" key="2" />
  </items>
</ComboBox>

我试图在onInitonBeforeRendering中调用set方法,但是此时不能更改输入属性(因为再次不可见)。

那么当设置命名的visible属性时,如何将组合框的输入设置为只读?

2 个答案:

答案 0 :(得分:0)

使用UI5控件的方法和属性来代替jquery:

sap.m.ComboBoxsap.m.InputBase借用了以下两种方法:

setEditable

setEnabled

,或者由于您使用属性绑定来获得可见性,因此对可编辑属性也应执行相同操作,例如{Data0200>/editableShovel}

答案 1 :(得分:0)

解决方案是使用sap.m.Select或为sap.m.Combobox实现“更改”事件处理程序,并使用类似于this sample的编码:

handleChange: function(oEvent) {
  var oValidatedComboBox = oEvent.getSource();
  var sSelectedKey = oValidatedComboBox.getSelectedKey();
  var sValue = oValidatedComboBox.getValue();
  if (!sSelectedKey && sValue) {
    oValidatedComboBox.setValueState("Error");
    oValidatedComboBox.setValueStateText("Please enter a valid country!");
  } else {
    oValidatedComboBox.setValueState("None");
  }
},