There is no standard quick way to do this, you can write a plugin for this. I put together one:
Ext.define('App.plugin.MultiDisableBind', { extend: 'Ext.AbstractPlugin', alias: 'plugin.multidisablebind', depFields: null, valuesMap: null, init: function (cmp) { this.setCmp(cmp); cmp.on('render', this.setup, this); }, setup: function () { var cmp = this.getCmp(), depFields = this.depFields, valuesMap = {}; if (!Ext.isArray(depFields)) { depFields = [depFields]; } Ext.Array.forEach(depFields, function (field) { if (Ext.isString(field)) { field = cmp.query(field)[0]; } cmp.mon( field, 'change', Ext.Function.createThrottled(this.updateValuesMap, 300, this), this ); valuesMap[field.getId()] = field.getValue(); }, this); this.valuesMap = valuesMap; this.updateCmpDisabled(); }, updateValuesMap: function (depField, newValue) { this.valuesMap[depField.getId()] = newValue; this.updateCmpDisabled(); }, updateCmpDisabled: function () { var cmp = this.getCmp(), toDisable = true; Ext.Object.each(this.valuesMap, function (fieldId, fieldValue) { if (!Ext.isEmpty(fieldValue)) { toDisable = false; return false } }); cmp.setDisabled(toDisable); } });
You can use this plugin on your buttons like this:
xtype: 'button', text: 'My button', plugins: { ptype: 'multidisablebind', depFields: ['^form #fieldQuery', fieldVar] }
In the depFields configuration depFields you specify links to the fields on which the state of the button depends, and the plug-in will control these fields, so when the value of each field changes, it will update the disabled state.
Here is a working fiddle: https://fiddle.sencha.com/#view/editor&fiddle/28cm