2012-06-14 63 views
0

我经常在一个应用程序中使用它,所以我想缩短它,如果我可以做一个扩展类来处理所有回调逻辑在一个地方,我试图设置它,但失败时试图加载与类:如何扩展Ext.Ajax?

Uncaught TypeError: Cannot read property 'isInstance' of undefined ext-all-debug.js:4136 
ExtClass.registerPreprocessor.config ext-all-debug.js:4136 
Ext.apply.doProcess ext-all-debug.js:4007 
Manager.registerPostprocessor.uses ext-all-debug.js:6037 
Ext.apply.require ext-all-debug.js:5771 
Manager.registerPostprocessor.uses ext-all-debug.js:6004 
Ext.apply.doProcess ext-all-debug.js:4007 
Ext.apply.doProcess ext-all-debug.js:4008 
Ext.apply.process ext-all-debug.js:3995 
Ext.Class.ExtClass ext-all-debug.js:3911 
Ext.ClassManager.create ext-all-debug.js:4676 
Ext.apply.define ext-all-debug.js:5095 
(anonymous function) Ajax.js:1 //My extended Ajax singleton 

这里是我尝试调用它

var changes = e.record.getChanges(); 
    if (e.record.get('id')) 
     changes.id = e.record.get('id'); 

    APP.ux.Ajax.request({ 
     url: '/admin/user/save/', 
     params: changes, 
     scope: this 
    }); 

UPDATE 这是有道理的,我不能相信忽视的一点,但我仍然获得相同的读取属性是实例'上面的未定义错误。这是现在的样子

这里是简单类(更新)

Ext.define('APP.ux.Ajax', { 
extend: 'Ext.data.Connection', 
requires: [ 
    'APP.ux.Msg' 
], 
singleton : true, 
autoAbort : false, 
request: function(config) { 
    var cfg = config; 

    Ext.apply(cfg, { 
     success: function(form, action) { 
      APP.ux.Msg.alert('Success', action.result.msg); 
      //TODO: Add more logic here 
     }, 
     failure: function(form, action) { 
      switch (action.failureType) { 
       case Ext.form.action.Action.CLIENT_INVALID: 
        APP.ux.Msg.alert('Failure', 'Form fields may not be submitted with invalid values'); 
        break; 
       case Ext.form.action.Action.CONNECT_FAILURE: 
        APP.ux.Msg.alert('Failure', 'Ajax communication failed'); 
        break; 
       case Ext.form.action.Action.SERVER_INVALID: 
        APP.ux.Msg.alert('Failure', action.result.msg); 
        break; 
      } 
     } 
    }); 
    this.callParent(cfg); 
} 
}); 

回答

1

这不是像这样要去工作。如果你想有失败/成功处理在一个地方 - 你需要覆盖标准request()方法,这样的事情(这会去你的App.ux.Ajax类)

request: function(config) { 
    var cfg = config; 

    Ext.apply(cfg, { 
    success: function(form, action) { 
     APP.ux.Msg.alert('Success', action.result.msg); 
     //TODO: Add more logic here 
    }, 
    failure: function(form, action) { 
     switch (action.failureType) { 
     case Ext.form.action.Action.CLIENT_INVALID: 
      APP.ux.Msg.alert('Failure', 'Form fields may not be submitted with invalid values'); 
      break; 
     case Ext.form.action.Action.CONNECT_FAILURE: 
      APP.ux.Msg.alert('Failure', 'Ajax communication failed'); 
      break; 
     case Ext.form.action.Action.SERVER_INVALID: 
      APP.ux.Msg.alert('Failure', action.result.msg); 
      break; 
     } 
    } 
    }); 

    this.callParent(cfg); 
} 
+0

感谢您的帮助,我有更新了上面的问题。 – Nathan

+1

可能你不需要'扩展'标准的Ajax类。从你的单身人士课程中调用它? – sha

+0

嗯,这可能是正确的想法。当我给它一个镜头时,我会报告。 – Nathan