确实没有“beforecheck”事件,因此您必须像这样覆盖onBoxClick 方法:
Ext.define('Checkbox', {
extend: 'Ext.form.field.Checkbox',
onBoxClick: function() {
if (this.checked && !this.uncheckCondition()) {
alert('This checkbox cannot be unchecked because....');
return;
}
return this.callParent(arguments);
},
uncheckCondition: function() {
var OK_to_uncheck = false;
return OK_to_uncheck;
}
});
示例:https://fiddle.sencha.com/#fiddle/sro
请注意,最好让用户知道为什么他们不能取消选中该复选框,否则他们可能会认为它不起作用。考虑到这一点,我会考虑在满足无法取消选中条件时禁用复选框或 readOnly。
更新
您实际上可以使用“beforeuncheck”事件来增强复选框类,如下所示:
Ext.define('Checkbox', {
override: 'Ext.form.field.Checkbox',
onBoxClick: function() {
if (this.checked && this.fireEvent('beforeuncheck', this) === false) {
return;
}
return this.callParent(arguments);
}
});
然后使用:
new Ext.form.field.Checkbox({
renderTo: Ext.getBody(),
boxLabel: 'I am too clever checkbox',
listeners: {
beforeuncheck: function() {
alert('No, you cannot uncheck me, he he :)');
return false;
}
}
});
示例:https://fiddle.sencha.com/#fiddle/srq