2

fetch() が呼び出されたときに (コレクション全体ではなく、その特定のモデルに対して) サーバーからこれを取得するバックボーン モデルがあるとします。

{ a: "val-1", b: "val-2" }

その後、モデルで fetch() を再度呼び出すと、今度はサーバーから次のように返されます。

{ b: "val-x", c: "val-y" }

この時点で、サーバーによって提供される最新の状態であるため、モデルを次の状態にしたいと考えています。

{ b: "val-x", c: "val-y" }

ただし、バックボーン モデルには代わりに次の状態があります。

{ a: "val-1", b: "val-x", c: "val-y" }

バックボーンでモデルを fetch() して、結果の状態がサーバーから返されたものとまったく同じになり、古い古いフィールドが含まれないようにするにはどうすればよいですか?

4

2 に答える 2

5

目的の動作を得る 1 つの方法は、問題のモデルにこの解析関数を追加することであることがわかりました。

parse: function(resp) {
  for (var key in this.attributes) {
    if (resp[key] === undefined) {
      resp[key] = undefined;
    }
  }

  return resp;
}

サーバーからの応答にローカル モデルにある属性がない場合、そのキーが未定義の値で応答に明示的に追加されます。これにより、fetch() が正しく動作し、モデルから削除されます。

于 2013-05-06T22:18:19.370 に答える
0

フェッチでローカル状態を破棄し、マージせずにサーバー データを取得する場合は、{reset: true} オプションを使用します。

ドキュメントから: http://backbonejs.org/#Collection-fetch

モデル データがサーバーから返されると、{reset: true} を渡さない限り、取得したモデルを (インテリジェントに) マージするために set を使用します。この場合、コレクションは (効率的に) リセットされます。

于 2013-05-06T21:24:41.447 に答える