説明:
ember-dataを使用すると、さまざまなシナリオが表示されますが、現時点では内部の動作とは一致していないようです。まず、いくつかのデータ:
{ "post":
{
"id": "60",
"title": "Hello, Stack Overflow friends!",
"comments": []
}
}
上記がデータベースからのデータであるとしましょう。
次に、各クライアントを呼び出すことにより、クライアント1とクライアント2post
でそれぞれレコードがフェッチされます。これまでのところ、どちらも同じレコードを持っています-空の配列がロードされています。post = App.Post.find(60)
post
comments
後で、クライアント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
の間に何らかの方法で関連付けを作成する方法はありますか?comment
addObject
post