I am trying to create a standard architectural pattern with ExtJs. I have decided to use a form of MVC using a client side application controller which controls all access to back end services via Ajax. This controller is using the Ext.Ajax class and extends Ext.util.Observable so client forms, panels etc can register with it as well as invoke it for notification. As a result I have decided to not use the FormPanel embedded ajax handler because I want to route all ajax requests through this application controller (which also reduces the number of places I have to config the Ext.Ajax.request and embed the service url. That being said, as a result I lose a lot of the built in data binding for forms and I'm really not interested in "hand" loading every form from result Json (or Ext.data.Record) model. Unless I am missing the mark on what the FormPanel can do, I have some ideas on how I might extend the FormPanel / BasicForm classes using a custom Ext.form.Action but I wanted to see what other ideas there might be out there. Below is a rough layout of the applicaton controller. As you can see you can easily create new ajax requests and register client forms/panels/whatever with the controller for notification, providing loose coupling between independent containers and controls.

var $controller = CompanyName.Controller = new Ext.util.Observable();

$controller.addRequest = function(requestFunctionName, config) {

    var that = this;

    //define a new request function with name defined by the requestFunctionName
    $controller[requestFunctionName] = function(parameters, overrideConfig, scope) {
        /*** initialize wrapper callback functions around client callback functions ***/
        /*** initialize Ext.ajax config and construct Ext.ajax class ***/
        /*** invokeRequest(); **/
        /*** onSuccess: callClientSuccessCallback & fireSuccessEventForSubscribers (so the client can choose ***/
       /*** onFailure: callClientFailureCallback & fireFailureEventForSubscribers (so the client can choose ***/
//add events named as a composite of the function name so that the client code can register for notification.
    $controller.addEvents(requestFunctionName, requestFunctionName + 'Success', requestFunctionName + 'Failure');

$controller.addRequest('getData', {
    url: $services.getDataUrl

var myNewPanel = new Ext.FormPanel({}) {

$controller.on('getDataSuccess', function(result) {
     myNewPanel.load(result);  /*** Data Binding, work your magic! ***/

$controller.getData({ params: /* some params */});
Please note, that I am purposefully avoiding the Model concept right now and fully realize that the controller callback shouldn't (ideally) be loading the data directly into the "View" (panel in this case). Hopefully, tho, your suggestion would factor that in.