2011-01-30 5 views
4

私はこの種のAjaxコードをたくさんの場所に繰り返しています。どのようにしてこれを1つのメソッドにリファクタリングすることができますので、成功または失敗に対しても異なる動作が可能です。Extjs ajax code refactor

Ext.Ajax.request({ 
    url : 'ajax.php' , 
    params : { action : 'getDate' }, 
    method: 'GET', 
    success: function (result, request) { 
    Ext.MessageBox.alert('Success', 'Data return from the server: '+  result.responseText); 
    }, 
    failure: function (result, request) { Ext.MessageBox.alert('Failed', result.responseText); 
    } 
}); 

答えて

3
 
MyAjaxRequest = Ext.extend (Ext.Ajax.request, { 
    url : 'ajax.php' , 
    params : { action : 'getDate' }, 
    method: 'GET', 
    success: function (result, request) { 
     Ext.MessageBox.alert ('Success', 'Data return from the server: '+ result.responseText); 
    }, 
    failure: function (result, request) { 
     Ext.MessageBox.alert('Failed', result.responseText); 
     } 
}); 

をクラス(あなたまで名前空間)あなたはまだURLを操作することができ、パラメータ、方法、成功、失敗を拡張することによって。もし設定されていなければ、デフォルトはそこにあります

+0

'success' /' failure'または単に 'callback'を使うべきですか? – fastcodejava

+0

良い答え、 'MyAjaxRequest'を呼び出す方法。 – javaguy

+0

これはクラスです:yourVariable = new MyAjaxRequest({}); – bensiu

2

このコードでは、同じ結果を達成する:

function callme (callback) { 
    Ext.Ajax.request({ 
     url : 'ajax.php' , 
     params : { action : 'getDate' }, 
     method: 'GET', 
     success: callback, 
     failure: function (result, request) { Ext.MessageBox.alert('Failed', result.responseText); 
     } 
    }); 
} 

callme(function (result, request) { 
    Ext.MessageBox.alert('Success', 'Data return from the server: '+  result.responseText); 
}); 
+0

これはコールバック関数を呼び出すたびに呼び出されます(コールミー(2番目))。 – bensiu

3

さて、この質問は古くはありますが、おそらくこれを行うためのより柔軟な方法があります。 Ext.Ajaxがシングルトンであることを認識することは本当に重要です。つまり、すでに独自のプリインスタンス化されたクラスです。シングルトンを「拡張」することはあまり意味がなく、別の機能が不必要に混乱したり、後で制限されたりする可能性があります。

あなたはこのようなあなた自身の特別なAjaxリクエスト機能を追加することができます。だから今、あなたがあなたの繰り返しAjaxリクエストを変更することができます

Ext.Ajax.dateRequest = function(myObj){ 
    // set the pre-configured parameters here 
    myObj.url = 'ajax.php'; 
    myObj.params = { action: 'getDate'}; 
    myObj.method = 'GET'; 
    // call the original request function with the modified config object 
    this.request(myObj); 
}; 

Ext.Ajax.dateRequest({ 
    success: yourSuccessFunction 
    ,failure: yourFailureFunction 
}); 

これまでの利益はあなたが簡単にできることです事前設定されたパラメータを "dateRequest"関数に追加し、何も書き換えずに追加パラメータを各Ajaxリクエストに追加することができます(別のタイムアウトなど)。

EDIT:Yikes!私はもともとExt.Ajaxを "クローンする"と思っていたソリューションを投稿しましたが、まだシングルトンを単にオーバーライドしています。

これは数年前に「サキ」(Ext guru)によって引用されたものです。彼は通常のオブジェクト/配列のために書いたクローン機能を参照することです:

クローン機能は、クラスまたはインスタンス化 内線オブジェクトのクローンを作成することを意図していない場合です。これらのインストールではほぼ不可能です。 イベントハンドラはほとんど常にクローニングするので、間違いなく という結果につながります。

シングルトンは「インスタンス化されたExtオブジェクト」であり、したがって容易に拡張またはクローン化できません。 Ext.Ajaxを直接混乱させたくない場合は、すでに述べたように関数を作成することができます。ここではもう少し柔軟な形式である:

function dateRequest(myObj){ 
    myObj.url = 'ajax.php'; 
    myObj.params = { action: 'getDate'}; 
    myObj.method = 'GET'; 
    return Ext.Ajax.request(myObj); 
} 

その後dateRequest({success: successFunc, failure: failFunc})でそれを呼び出します。

関連する問題