2016-12-08 5 views
0

私はBackbone.jsを使用しており、モデルのコレクションを持っています。このコレクションは取得され、フロントエンドに表示されます。フロントエンドでは、ユーザーが新しいモデルを削除してコレクションに追加したいと思っています。バックエンドでの同期コレクションの変更

ユーザーが終了して「保存」をクリックすると、コレクション全体が更新されます。つまり、「保存」をクリックすると、コレクションが同期されます(何らかの形で)。追加されたモデルは保存され、削除されたモデルは削除されます。

私がモデルを削除し、追加することによって、コレクションを操作して、元を使用する場合:

this.collection.sync() 

それはモデルを削除し、追加しますか?

+0

質問は次のとおりです。保存ごとにフルコレクションを送信しますか? – oak

+0

「クライアントサーバーコール数」と「コールサイズ」と「データベース操作数」の間にはトレードオフがあります。しかし、あなたがすべてのことを気にしなければ、サーバ側で、着信リストにないすべてのレコードを削除し、それにリストを追加する機能をいくつか作成することができます。次に、 'this.collection.sync( 'update'、this.collection)' – oak

+0

@oakを実行できます。セーブコールは1つだけです。だから私は一度だけコレクションを送ります。 1つのリクエストですべてを実行するのに最適です。 – TorK

答えて

0

これを達成するには少なくとも2つの方法があります。

モデルにモデルを更新/追加する場合は、.saveと直接モデルを保存し、モデルが取り除かれたとき、それに.destroyを呼び出す

を管理するためのAPIエンドポイントを作成します。

コレクションには.create functionもあり、新しいモデルを追加して同時に保存します。

1つのリクエストですべてを実行するのに最適なことです。

必ずしもそうではありません。コレクションが大きく、変更が少ないため、リスト内のモデルを追加、削除、または更新するための小さな要求ではなく、毎回100個のオブジェクトをサーバーと交換することができます。

賛否

  • 再利用可能なエンドポイントは、ライトデータ転送、より高速なコレクション全体を送信するよりも(変更のみが部分的な更新を介して送信されている)
  • 個々のモデル
  • 可能を管理します各動作のカスタム動作
  • 簡単リアルタイム更新実装のIDを持っている
  • ニーズモデルを多くの変更を行うとき

短所が

  • もっと要求
  • 追加のエンドポイントが
  • を管理します一括処理ではありません(すべてのモデルを一度に保存します)

コレクションが保存されることを意図されていないモデルにコレクションのmodels配列を入れてください。代わりに、コレクションのmodelsをAPIエンドポイントと通信するモデルに入れます。このエンドポイントでは、配列フィールドを持つオブジェクトが必要になります。このオブジェクトは、コレクションサーバー側を置き換える役割を果たすことができます。

var CollectionModel = Backbone.Model.extend({ 
    urlRoot: "collection/endpoint/" 
}); 

var myModel = new CollectionModel(); 

// ...sometime later... 

myModel.save({ 
    arrayAttribute: yourCollection.toJSON() 
}, { patch: true }); 

長所

  • 一方のエンドポイント。常にAPIと同じ呼び出し
  • 実装が容易;ただ保存が

短所を発生する一つの場所で

  • すべてのモデルが変更に関係なく、すべての要求に転送され
  • コレクションが大きい場合には遅いだろ

Collection's .sync functionは、Backbone.sync a正しいパラメータがないと何もしません。 .fetchline 1055)の内部でのみ使用され、カスタム動作を追加しないかぎり、直接使用することはできません。

+0

お返事ありがとうございます、私はそれを感謝します!しかし、すべての変更のために、その時点で1つのモデルを送信する方法はありません。コレクションは、ユーザーが「保存」をクリックすると、最後にのみ更新されます。 – TorK

+0

@torkそれは私の答えの2番目の部分がすべてについてです –

関連する問題