4

エンバーで遊んでいる間、私は親と子の両方を同時に救おうとしていました. 私が気づいたのは、子のparent_idが常にnilに設定されていたことです.

その後、GitHub でこの問題を見ました。この機能は Ember-Data から削除されたようですが、後で復活する予定です。それまでは、これを行うために独自のアダプターをロールバックする必要があります。

@tomdale の回答を読むと、実装がそれほど難しくないように見えますが、実装に関するいくつかの質問があります。

レコードの belongsTo 関連付けがいつ変更されたかを知るにはどうすればよいでしょうか? そして、これはどのアダプターフックの下に入るでしょうか?

ありがとう!

4

1 に答える 1

0

ストアは、特別なオブジェクトとの関係の変化を追跡します。次のようなリレーションシップの変更オブジェクトをストアに要求できます。

store.relationshipChangeFor(child.get('clientId'), belongsToAssociationName);

変更が行われなかった場合、何も返されません。

しかし、それを行う必要はおそらくないでしょう。リレーショナル データ ストアの場合、子レコードはその属している関連付けを永続化する責任があります。作成/更新が成功すると、それらのすべての関係を盲目的に解決済みとしてマークすることができ、ストアはそれらのいくつかが実際にダーティでなくても気にしません。

DS.RESTAdapter実際、それはまさにのことです:

DS.RESTAdapter = DS.Adapter.extend({
  // ...

  didSaveRecord: function(store, record, hash) {
    record.eachAssociation(function(name, meta) {
      if (meta.kind === 'belongsTo') {
        store.didUpdateRelationship(record, name);
      }
    });

    store.didSaveRecord(record, hash);
  }

  // ...
});

関係を解決済みとしてマークする準備ができていると判断した場合は、いつでもどこでも を呼び出すだけstore.didUpdateRelationship(child, belongsToAssociationName)です。


そうは言っても、本当の秘訣は関係を解決済みとしてマークすることではなく (それは既に実装されているため)、親が作成されるまで子の保存を遅らせることです。

私たちは実際にそれを行うプル リクエストを送信しました。それが私たちを助けているのと同じくらいあなたを助けるなら、私たちはリクエストに対するいくらかのサポートに感謝します.

于 2012-11-17T17:51:40.130 に答える