3

「余分な」プロパティをサーバーに送り返すと、ヒットしている API が爆発します。ここで、サーバー側に存在しないクライアント側のバックボーン モデルにプロパティを設定することで、いくつかの MVC ルールまたは何かを破ったと確信していますが、私がする必要があるのは、CREATE 要求を開始することですが、いくつかのCREATE リクエストを開始しているモデルの属性。

バックボーンでこれを簡単に行うことができます:

Model.save({key: val}, {patch: true}); 

次に、バックボーン同期 methodMap のデフォルトのパッチ ルートを PATCH ではなくPOST に変更します。これにより、必要に応じて (POST ではなく) 実際に PATCH を実行できるようにしたいという点を除いて、探しているものが正確に得られます。作成アクションのみのパッチであるかのようにPOST する必要があります (更新アクションではありません!)

つまり、要するに、次のようなものを取る必要があります。

new Backbone.Model({'foo': 'bar', 'baz': 'beh'});

そして、それ自体をサーバーに同期するように指示しますが、「foo」のみを送信し、「baz」は送信しませんが、POST として送信する必要があります ( PATCH にすることはできません)。

何か案は?

4

3 に答える 3

10

以下は、必要に応じてベース バックボーン モデルまたは個々のモデルに配置できる上書き保存です。すべてのユースケースをカバーしているわけではありませんが、これには適しているようです。

JS フィドル: http://jsfiddle.net/hEN88/1/

このオーバーライドにより、任意のモデルに「serverAttrs」配列を設定して、サーバーに送信されるプロパティをフィルタリングできます。

save: function (attrs, options) { 
    attrs = attrs || this.toJSON();
    options = options || {};

    // If model defines serverAttrs, replace attrs with trimmed version
    if (this.serverAttrs) attrs = _.pick(attrs, this.serverAttrs);

    // Move attrs to options
    options.attrs = attrs;

    // Call super with attrs moved to options
    Backbone.Model.prototype.save.call(this, attrs, options);
}
于 2013-04-10T00:50:05.087 に答える
1

この質問は、同期時のモデル プロパティの除外 (Backbone.js)model.save() の Backbone.js/express.js パラメータの重複の可能性があるように思えます。

これらの両方のケースでの答えは、save()関数をオーバーライドすることになりました。

于 2013-04-09T21:01:01.533 に答える