2

サーバーからオブジェクトのリストをフェッチしようとしていますが、コレクションは最初のレコードを受け入れ、残りを無視します。

サーバーからの応答のタイプはapplication/json

 [{"id":1,"name":"A"}, 
  {"id":2,"name":"B"}, 
  {"id":3,"name":"C"}]

クライアント側で、

 var collection = new Backbone.Collection;
 collection.url = 'url_to_the_resource';

 collection.fetch();
 console.log( collection.toJSON());

出力は

 [{"id":1,"name":"A"}]

編集

コレクションの準備ができたら、つまり次のように非同期呼び出しが完了した後に log を呼び出します。

collection.fetch().done( function() {
  console.log( collection.toJSON() );
});

それでも1つのレコードを取得しています。また、backbone.js のソース コードを確認したところ、次の行が見つかりました。682

    // If a duplicate is found, prevent it from being added and
    // optionally merge it into the existing model.
    if (existing = this.get(model)) {

その行の直後にログを追加すると、バックボーンがすべてのモデルをマージすることがわかりました。なぜですか?

4

3 に答える 3

2

推測しかできません。コレクションコードを提供できれば、それは素晴らしいことです。

  1. モデルの idAttribute (オーバーライドされている場合) が一意であることを確認してください。
  2. parseオーバーライドされている場合は、コレクション メソッドを確認してください。オブジェクトの配列を返す必要があります。
  3. add, remove, merge http://backbonejs.org/#Collection-setで遊んでみてください。
于 2013-06-16T05:43:16.437 に答える
0

最も可能性が高いのはオーバーライドの問題
です。元の JSON データの各レコードでさえ、まったく異なります。


モデルのidAttributeプロパティを取り消すか、コレクションのmodelIdメソッドを取り消すと役立つ場合があります。


.findWhere({_id: pkId})代わりに使用できます.get(pkId)

于 2015-10-30T12:13:33.010 に答える