1

一度に複数の電話をかけようとしていますfetch()が、現在これを実行しているとき:

function notWorking(){
    collection1.fetch()
    collection2.fetch()
    collection3.fetch()
    collection4.fetch()
}

1つだけfetch()で、他の3つで500の内部エラーを返したfetch() 場合、これを実行すると、次のようになります。

function working(){
    collection1.fetch({
       success:function(){
            collection2.fetch({
               success:function(){
                    collection3.fetch({
                       success:function(){
                            collection4.fetch()
                       }
                    })
               }
            })
       }
    })
}

動作しますが、その恐ろしい習慣のように見えますが、一度に複数を引くためのより良い方法fetch()ですか?

(バックエンドは、その価値のためにsinatraとdatamapperでrubyを使用しています)

4

1 に答える 1

0

voithosが示唆したように、あなたの中心的な問題はサーバー側の問題です。一度に複数のフェッチを行うことを妨げるものは Backbone (または jQuery でさえ) にはありません。

そうは言っても、サーバー側の実装に行き詰まっている場合は、Backbone のフェッチが jQuery の ajax の戻り値 (それ自体が "Deferred" オブジェクト) を返すという事実を利用して、少なくともコードを少しクリーンアップできます。 ):

function working(){
    collection4.fetch().complete(
        collection3.fetch().complete(
            collection2.fetch().complete(
                collection.fetch()));
}

または、次のように、適切なオプションを fetch を介して jQuery に渡すことにより、実際に AJAX リクエストを同期させることができます。

function working(){
    collection.fetch({async: false});
    collection2.fetch({async: false});
    collection3.fetch({async: false});
    collection4.fetch({async: false});
}
于 2013-01-02T19:50:30.890 に答える