2013-05-20 68 views
3

我想創建一個自定義函數,每次服務器發送響應時都會調用它。如何正確覆蓋Extjs4中的Ext.data.Connection?

Ext.override(Ext.data.Connection, { 
    handleResponse : function(response) { 
     console.log('function call'); 
    } 
}); 

我想知道我需要爲了改變這種代碼的ExtJS 4.2.0工作:我可以用下面的代碼成功地做到這一點Extjs3?

謝謝,Y_Y

回答

2

尋找內部Extjs 4.2.0庫文件Connection.js我注意到沒有聲明'handleResponse'函數,因爲在Extjs 3.2.1被聲明。相反,Extjs 4.2.0具有'onComplete'功能。重寫此函數使我能夠在'requestcomplete'之前處理幾件事情,類似於重寫'handleResponse'。

+0

看起來你可以在回覆你的評論之前就想通了。理想情況下,您會發送一個錯誤代碼的響應,並在錯誤正文中包含「isError」消息。但是,您也可以按照您的建議覆蓋'onComplete'。 – Eric

3

你實際上並不需要重寫或擴展任何東西。 Ext.data.Connection的文檔顯示它觸發了三個事件。其中兩個是requestcomplete,當請求成功時觸發,而requestexception在請求失敗時觸發。

現在,請參閱Ext.util.Observable.observe的文檔,其中演示瞭如何捕獲給定類的所有事件。例如:

Ext.util.Observable.observe(Ext.data.Connection, { 
    requestcomplete: function(conn, response, options){ 
     // Do stuff on success 
    }, 
    requestexception: function(conn, response, options){ 
     // Do stuff on failure 
    } 
}); 

這就是你如何讓所有Ext.Ajax所有請求完成事件。在內部,observe方法使用capture方法,因此清理時必須在班上撥打releaseCapture

+0

但是,我同意你的回答,我在重寫handleResponse函數時傳遞了一個'isError'響應。這樣做,我能夠確定我的自定義響應是否包含錯誤,然後根據「isError」調用fireEvent('requestcomplete/requestexception')。你的方式迫使我在'requestcomplete'內部執行我的邏輯,並在讀取'isError'之後觸發響應參數,然後觸發'requestexception'...是否應該這樣?或者是否有我可以使用的事件,可以在觸發'requestcomplete'或'requestexception'之前讀取響應? –

相關問題