4

バックボーン モデルを保存し、成功したらコレクションを反復処理して保存し、それぞれの成功で別のコレクションを反復処理して保存し、すべてが完了したら 1 つの AJAX 要求を実行する必要がある状況があります。これは私が持っているものです:

backboneModel.save(
    {},
    {
         wait: true,
         success: function (model1, response1)
         {
              $.each(backboneCollection1.models, function () {
                    this.save(
                        {},
                        {
                             wait: true,
                             success: function (model2, response2)
                             {
                                  $.each(backboneCollection2.models, function () {
                                       this.save(
                                           {},
                                           {
                                                wait: true,
                                                success: function (model2, response2)
                                                {
                                                     //If i put the AJAX request here it will happen for every iteration which is not desired
                                                }
                                           });
                                  });
                              }
                         });
               });
               //If i put the AJAX request here it will fire after one iteration of the first each even with async set to false on the AJAX request
         }
   });

すべてのバックボーン モデルがサーバーに保存された後に一度だけ起動するように、この AJAX リクエストを実行する場所について何か提案はありますか?

4

2 に答える 2

2

私が作成したこのjsfiddleを見てください。成功のコールバックを置き換え、Promise を使用してモデルを保存し、コレクション 1、コレクション 2 の順に保存します。これらがすべて完了したら、done() で ajax 呼び出しを行うことができます。

変更の大部分は、上記のものをこれに置き換えることです。

var saveEverything = backboneModel.save()
.pipe(function() { return saveCollection(backboneCollection1); })
.pipe(function() { return saveCollection(backboneCollection2); });
saveEverything.done(function() { console.log('done with everything, ajax time') });//make your ajax call in the done

jQuery の promise が何であるかわからない場合は、promiseについて説明している非常に優れたブログ記事をご覧ください。私の例がまったく意味をなさない場合は、質問してください。何が起こっているのか、何が起こっているのかを説明しようとすることができます。

于 2012-10-26T19:09:38.410 に答える
0

モデルを繰り返し処理しながらカウントを行い、カウント = モデルの長さの場合は、AJAX を呼び出します

于 2012-10-26T17:49:34.490 に答える