2

あるユースケースでのベストプラクティスを探しています (sencha touch 2 フレームワークを使用):

複数の ajax 呼び出し (JSONP 応答) があり、それらすべての応答の間でフィード データを日付でフィルター処理したいと考えています。問題は、いつフィルタリングを開始するかを決めていないことです。すべてのajaxがいつ完成するか知りたいです。

jQueryでは、例として"promises"を使用します。

    $.when($.ajax("/page1.php"), $.ajax("/page2.php"), ... $.ajax("/pageN.php")).done(function(a1,  a2){
      // do something
    });

、sencha touch 2 で同様の "Deferred" を見つけることができません。または、データがロードされたことを検出する別の方法を提案してください。

この状況での提案の助けやベストプラクティスに感謝します。

更新:

はい、どこでも煎茶タッチの「Ext.Ajax.request」を使っています。

すべてのリクエストをキャッチするために、次のようなものを使用しようとしました:

    Ext.Ajax.on('beforerequest', this.dosomething, this);
    Ext.Ajax.on('requestcomplete', this.dosomething, this);
    Ext.Ajax.on('requestexception', this.dosomething, this);

しかし、これら 3 つのケースのいずれにおいても、何も解雇されません。

PS: このイベントをメインのメイジで実行しようとしましたが、アプリケーション全体を「起動」すると「初期化」されますが、どのような状況でも何も起動しません。

これは、いつ、どのようにイベントを発生させようとするのか、何か問題がありますか?

アドバイスありがとう!!!

4

2 に答える 2

1

Ext.Ajax.request を使用していて、すべてのリクエストを同時にまとめて行いたい場合、いくつかの方法があります。各リクエストが行われると、単純なカウンターをインクリメントし、リクエスト コールバック関数でそのカウンターをデクリメントできます。コールバック関数では、カウンターがゼロに戻ったかどうかも確認します。そうであれば、すべてのリクエストが完了しており、すべてのデータを組み合わせることができます。比較的単純。

もう 1 つのオプションは Ext.Ajax.requests オブジェクトを利用することです。このオブジェクトには、現在完了していないすべてのリクエストが含まれています。これらの開始/終了の間に他のリクエストが開始されていない限り、コールバック関数でこのオブジェクトをチェックするだけで済み、リクエストがない場合はデータを処理できます。

Ext.Ajax のドキュメントについては、このリンクを参照してください。

于 2012-12-05T21:59:40.040 に答える