1

説明:

ember-dataを使用すると、さまざまなシナリオが表示されますが、現時点では内部の動作とは一致していないようです。まず、いくつかのデータ:

{ "post":
  {
    "id": "60",
    "title": "Hello, Stack Overflow friends!",
    "comments": []
  }
}

上記がデータベースからのデータであるとしましょう。

次に、各クライアントを呼び出すことにより、クライアント1とクライアント2postでそれぞれレコードがフェッチされます。これまでのところ、どちらも同じレコードを持っています-空の配列がロードされています。post = App.Post.find(60)postcomments

後で、クライアント2にコメントが作成されます。これは、を呼び出すことによって行われcomment = App.Comment.createRecord({text: "Why, hello there.", post: post})ます。

コメントデータはサーバー側に保存され、次のようになります。

{ "comment":
  {
    "id": "80",
    "text": "Why, hello there.",
    "post_id": "60"
  }
}

この時点で、クライアント2は最新です(コメントが作成された場所であるため)が、クライアント1は新しいコメントを認識していないため、同期がとれていません。

これで、クライアント1は、新しく作成されたコメントを何らかの方法で(XHRまたはWSを介して)認識できるようになります。

クライアント1がIDを認識すると、commentを呼び出してレコードがフェッチされますcomment = App.Comment.find(80)

post.get('comments') ...それでも、クライアント1を呼び出すと、コメントは0になります。新しいコメントは正常にフェッチされましたが、commentとの間の関連付けは行われませんpostでした。

問題:

  • commentクライアント1でコメントをフェッチするとき、レコードをレコードに関連付ける自動関連付けの魔法は発生していませんpost

post注1:クライアント1では、レコードは元々。でロードされていたため、これは発生しませんcomments: []。配列にコメントIDが含まれている場合80、これは機能します(ロード時にコメントが存在しなかったという事実を除く)。

注2:post.get('comments').addObject(comment)クライアント1を呼び出すことで手動で関連付けを追加できますが、これはpostレコードを汚し、これを処理する適切な方法ではないようです。

質問:

  • レコードを汚すような機能や同様の機能を使用せずに、クライアント1のとレコードpostの間に何らかの方法で関連付けを作成する方法はありますか?commentaddObjectpost
4

1 に答える 1

1

リレーションシップを持つレコードをロードするbelongsToと、ember データは現在、リレーションシップの「親」レコードを更新しません。

この問題を解決する 1 つの方法は、「親」レコードをサイドロードすることです。あなたの場合、(XHR または WS 経由で) と を送信commentpostます。

この問題のオープン チケットがあります https://github.com/emberjs/data/pull/695

于 2013-04-20T17:03:43.253 に答える