我尝试清除特定组合的值。有时它会发生,有时 - 不是。我尝试了不同的方法,但无济于事。现在,我这样做:
mycombo.reset();
mycombo.clearValue();
mycombo.applyEmptyText();
是的,我的组合有forceSelection:true
。
我甚至检查了这三条'神奇'代码行:
mycombo.clearValue();
mycombo.applyEmptyText();
mycombo.getPicker().getSelectionModel().doMultiSelect([], false);
但我仍然有相同的照片。重置组合偶然发生
答案 0 :(得分:2)
在组合中,有一种名为assertValue
的魔术方法经常导致一些问题:
assertValue: function() {
var me = this,
value = me.getRawValue(),
rec, currentValue;
if (me.forceSelection) {
if (me.multiSelect) {
// For multiselect, check that the current displayed value matches the current
// selection, if it does not then revert to the most recent selection.
if (value !== me.getDisplayValue()) {
me.setValue(me.lastSelection);
}
} else {
// For single-select, match the displayed value to a record and select it,
// if it does not match a record then revert to the most recent selection.
rec = me.findRecordByDisplay(value);
if (rec) {
currentValue = me.value;
// Prevent an issue where we have duplicate display values with
// different underlying values.
if (!me.findRecordByValue(currentValue)) {
me.select(rec, true);
}
} else {
me.setValue(me.lastSelection);
}
}
}
me.collapse();
}
基本上,当您不使用multiSelect
时,当您尝试设置在商店无法找到的值时,始终会使用lastSelection
。
我通常将虚拟记录添加到存储,这对应于空值。如果您需要将allowBlank
设置为false,则会出现问题。
作为添加虚拟记录的替代方法,您可以覆盖assertValue
方法,如下所示:
assertValue: function () {
var me = this,
value = me.getRawValue();
if (me.forceSelection && me.allowBlank && Ext.isEmpty(value)) {
me.setValue(value);
me.collapse();
return;
}
this.callParent(arguments);
}