Ура, нашел способ без грязных методов.
Вот код:
https://fiddle.sencha.com/#fiddle/lgs
console.clear();
Ext.FocusManager.enable(true);
Ext.define("MyComponent", {
extend: "Ext.Component",
focusable: true,
initFocusable: function() {
var me = this;
me.on("render", function() {
Ext.override(this.getEl(), {
focus: function() {
this.callParent(arguments);
me.onFocus();
},
blur: function() {
this.callParent(arguments);
me.onBlur();
}
});
});
}
});
var comp = Ext.create("MyComponent", {
renderTo: Ext.getBody(),
html: "Тестовый компонент"
});
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comp.on("focus", function() {
console.log("FOCUS");
});
comp.on("blur", function() {
console.log("BLUR");
});
comp.focus();
comp.blur();
Здесь я внедрил в элемент компонента недостающий функционал, а именно вызовы методов me.onFocus() и me.onBlur() и все заработало без всяких левых тегов типа инпута.
Остался последний штрих - оформить этот код в виде миксина, чтобы можно было одной строчкой его внедрять в любой компонент.