10

Django/TastyPie をバックエンド REST サービス プロバイダーとして使用して Web アプリケーションを構築し、AngularJS ベースのフロント エンドを構築して、サーバー上の CRUD オブジェクトに多くの $resource ベースのサービスを使用しています。これまでのところ、すべてがうまくいっています!

ただし、オブジェクトの 1 つまたは 2 つの変更されたフィールドのみを更新する場合は、出荷するデータの量を減らしたいと考えています。

TastyPie は、HTTP PATCH メソッドを使用してこれをサポートします。オブジェクトに .diff() メソッドを定義したので、更新時に送信するフィールドを決定できます。$resource によって返されたインスタンスオブジェクトでメソッドを定義/実装して、必要なことを行う方法に関するドキュメントが見つかりません。

私たちがやりたいことは、別のメソッドをオブジェクト インスタンスに追加することです (こちらの Angular.js ドキュメントで説明されているように) myobject.$partialupdate()のように:

  1. .diff() 関数を呼び出して、送信するフィールドを決定してから、
  2. HTTP PATCH リクエストを使用して、それらのフィールドのみをサーバーに送信します。

これまでのところ、これを行う方法を説明するドキュメント (または他の SO 投稿) を見つけることができませんが、誰かが持っている可能性のある提案を本当に感謝しています.

ありがとうございました。

4

3 に答える 3

14

使用することをお勧めします

update: {
    method: 'PATCH',
    transformRequest: dropUnchangedFields
}

どこ

var dropUnchangedFields = function(data, headerGetter) {

    /* compute from data using your .diff method by  */
    var unchangedFields = [ 'name', 'street' ];

    /* delete unchanged fields from data using a for loop */ 
    delete data['name'] ;
    delete data['street'];

    return data;

}

PS:あなたのリソースへの参照がそれのコピーであるかどうか、メモリからはわからないので、フィールドを削除する前にdataのコピーを作成する必要があるかもしれませんdata

また、 の代わりにreturn dataが必要になる場合がありreturn JSON.stringify(data)ます。


ソース(ドキュメント ページで「transformRequest」を検索)

于 2014-04-28T15:04:57.350 に答える