3

現在、コレクションを設定するために使用する 2 つのオブジェクトと 1 つのオブジェクトを返すサーバーへの呼び出しがあります。(私はこれを 10 秒ごとにポーリングし、すぐにこれに socket.io を使用する予定です)。

オブジェクトでセットコレクションを使用するたびに、モデルの初期化関数が呼び出されることに気付きました。このセットはスマートで、属性を追加/変更するか、モデルを削除しただけで、変更されていないものについては何もしなかったと思いました。

// All Orders Collection
var AllOrders = Backbone.Collection.extend({
    model: Order,
    url: '/venues/orders'
 });


 var Order = Backbone.DeepModel.extend({
     idAttribute: 'orderid',
     url: '/venues/orders',


    initialize : function(){
        // this is called everytime i use set even if model is in collection
        // do stuff
    }
 })


 *****************
 app.allOrders.set( app.getOrders.get('orders') );
4

2 に答える 2

0

これは、クライアントとサービスの作成方法によって異なります。デフォルトでは、GET /venues/orders は注文リスト全体を返します。変更のみを取得したい場合は、現在の注文を保持し、サーバーからのみ変更を取得する注文コレクションのカスタム同期を記述する必要があります (たとえば、現在の ID を送信するか、最後の呼び出しのタイムスタンプを送信します)。 )。ところで。初期化は、json から作成され、collection.set は json オブジェクトをバックボーン モデルと比較できず、バックボーン モデルとバックボーン モデルのみを比較できるため、フェッチされたすべてのモデルによって呼び出されます。

可能な解決策:

  1. json をバックボーン モデルと比較する設定をオーバーライドします。
  2. app.getOrders.get('orders') & サーバー側コードをオーバーライドして、変更のみをプルダウンするか、プルされた json から既存のオブジェクトを手動で削除します。
  3. コードを初期化から別の場所、たとえば collection.add イベント ハンドラーに移動します。
于 2013-06-26T18:26:16.060 に答える