Now I don't see this confirm message when I click on Submit. But I know that the form listeners is working and it does call the confirmSend function. When I just put a Alert() in confirmSend, it shows that message. Like this:

Isn't this really a bug with the Ext.mixin.Observable#fireAction method?
The documentation says..."Fires the specified event with the passed parameters and execute a function (action) at the end if there are no listeners that return false."

Shouldn't you just make the default order for functions passed into the fireAction method be "after"?

Same issue, different scenario

The fireAction function (3rd parameter 'fn') is called BEFORE controller's bound slots if identifier selectors are used in the 'control' config. If xtype selectors are used, fireAction() works as expected (and the action function is called AFTER). Same workaround, explicitly use this.fireAction('click', [ this ], '_doClick', this, {}, 'after').