27

/api/page/1それぞれとを表す 2 つのコレクションがあるとし/api/page/2ます。これらの 2 つのコレクションを新しい単一のコレクションにマージする方法はありますか?

4

6 に答える 6

49

オプション1

コレクションをまだフェッチしていない場合は、最初のコレクションをフェッチしてから、{add : true} フラグを指定して 2 番目のコレクションをフェッチすると、2 番目のコレクションが最初のコレクションにマージされます。

collection.fetch({data : {page : 2});
=> [{id: 1, article : "..."}, {id: 2, article : "..."}];
collection.fetch({data : {page : 2}, add : true });
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, {id: 3, article : "..."}];

オプション 2

既にコレクションを取得して 2 つの変数に保存している場合は、2 番目のコレクションのすべてのコンテンツを最初のコレクションに追加するだけです。

collection1.add(collection2.toJSON());

このオプションは、2 番目のコレクションが追加されたときに最初のコレクションが「追加」イベントを発生させるという事実の影響を受けます。このイベントが原因で不要な UI が再レンダリングされるなどの副作用がある場合は、{silent : true} フラグを追加して抑制できます。

collection1.add(collection2.toJSON(), {silent : true});

オプション 3

これらのコレクションの JSON 形式のみが必要な場合、つまり HTML テンプレートのレンダリング目的で、すべてを JS リテラル (配列、オブジェクト) に減らすことができます。

collection1.toJSON().concat(collection2.toJSON());
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, ...];

オプション 4 = オプション 2 + 3

すでに両方のコレクションをフェッチしている場合は、JS リテラルに減らして、すべてを新しいバックボーン コレクションに追加できます。

var rawCollection = collection1.toJSON().concat(collection2.toJSON());
var newCollection = new Backbone.Collection(rawCollection);
于 2012-09-12T09:36:56.790 に答える
41

これを試してください、コレクションはモデルの配列です

collection1.add(collection2.models); 

使用する場合

 collection1.add(collection2.toJSON());

次に、変更を参照します

于 2012-09-15T06:20:36.687 に答える
5
collection.add(models, [options]) 

コレクションはモデルの配列です

collection.models

モデルの配列を返します

モデル (またはモデルの配列) をコレクションに追加します。

A = Backbone.Collection;
collection1 = new A([
    {key, 'value'},                  //model1
    {key : value1}                   //model2 in collection1
]);

B = Backbone.Collection;
collection2 = new B([
    {key1, 'value'},                 //model1
    {key1 : value1}                  //model2 in collection2
]);


collection1.add(collection2.models);  //now, collection1 has four models..
于 2012-09-12T09:32:54.123 に答える
5

使用する

collection.models

の代わりに

collection.toJSON()
于 2012-09-12T10:55:29.263 に答える
0

これを行うことで、 に結び付けられたセマンティックが失われるように思えます/api/page/{1, 2}/

また、バックボーンもアンダースコアも、あなたがやろうとしていることを正確に実行する関数/メソッドを提供していないように思えます。

だからあなたのオプション:

  • 新しいコレクションを作成し、以前のコレクションから各アイテムを追加します。
  • 最初のコレクション アイテムを 2 番目のコレクションに追加する

しかし、おそらくあなたはすでにこれを知っていました。

于 2012-09-12T08:40:48.070 に答える
0

Collection.models はモデルの配列への直接アクセスを提供し、Collection.add はモデルの配列を引数として取ります。

于 2012-09-12T09:45:25.523 に答える