在我的一个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>
我试图在onInit
或onBeforeRendering
中调用set方法,但是此时不能更改输入属性(因为再次不可见)。
那么当设置命名的visible属性时,如何将组合框的输入设置为只读?
答案 0 :(得分:0)
使用UI5控件的方法和属性来代替jquery:
sap.m.ComboBox从sap.m.InputBase借用了以下两种方法:
,或者由于您使用属性绑定来获得可见性,因此对可编辑属性也应执行相同操作,例如{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"); } },