2

2番目のリクエストが最初のリクエストの結果に依存しているバックボーンリクエストをデイジーチェーン接続しようとしています。どうすれば正しい方法でそれを行うことができますか?jQuery$.done()は私にとって正しい方法で機能していないようです。よりよく説明するために、ここに架空の例があります:

私はサプライヤーのリストを持っており、各サプライヤーは彼らが会社に供給する部品のリストを持っています。すべてのサプライヤをフェッチしてから、このサプライヤのリストのすべてのパーツをフェッチしたいと思います。これが私が運がなくて使用しようとしているサンプルコードです。

var App = {};

App.Supplier = Backbone.Model.extend({ });
App.Part = Backbone.Model.extend({ });

App.Suppliers = Backbone.Collection.extend({
   model: App.Supplier 
});

App.Parts = Backbone.Collection.extend({
    model: App.Part
})

var suppliers = new App.Suppliers;
var parts = new App.Parts;

var supplier_request = suppliers.fetch();

supplier_request.done(function(){
    parts.fetch_by_suppliers([supplier1, supplier2, ...]);
});

何が起こるかというと、最初の応答が受信された直後で、モデルがインスタンス化される前にApp.Supplier、2番目の要求が発生します。その結果、サプライヤリストは空のままになり、2番目のリクエストは空のサプライヤリストで開始されます。

4

1 に答える 1

2

このデイジーチェーン接続を実現するには、成功コールバックをfetchメソッドに渡す必要があります。コールバックは引数としてsuccess渡さ(collection, response)れます。次の方法で、例のコードを書き直すことができます。

...

suppliers.fetch({success: 
  function(collection, response){
     parts.fetch_by_suppliers(collection);
  }
});

Backbone.jsのドキュメントはそれをかなりよく説明しています。 http://documentcloud.github.com/backbone/#Collection-fetch

これがあなたを助けることを願っています!

于 2012-04-10T03:39:50.970 に答える