私はjs-dataの3.0.0-rc.4を使用していますが、バックエンドAPIを1回呼び出すだけで複数のモデルをロードする必要があります。私はまだバックエンドを構築しており、異なるエンドポイントへの複数の呼び出しを行うのではなく、異なるテーブルからすべてのデータを一度に取得できるようにしたいと考えています。js-data複数のモデルを1つのルートで扱います
1
A
答えて
2
できます。あなたのウェブアプリケーションがロードしようとしているルートが/ posts/123で、Post#123とそのコメントをロードする必要があります。これは2つの異なるテーブルにあります。あなたのクライアント側のアプリでは、それぞれ/post/123
と/post/123?with=comment
のようなものにGETリクエストを行います
store.find('post', 123)
あるいは
store.find('post', 123, { params: { with: 'comment' } })
ような何かを行うことができます。
あなたのバックエンドは、そのコメントが埋め込まれた投稿レコードで応答できます。投稿とコメントの関係についてJSDataに伝えている限り、それぞれがメモリ内の正しい場所にキャッシュされます。たとえば:
store.defineMapper('post', {
relations: {
hasMany: {
comment: {
localField: 'comments',
foreignKey: 'post_id'
}
}
}
});
store.defineMapper('comment', {
relations: {
belongsTo: {
post: {
localField: 'post',
foreignKey: 'post_id'
}
}
}
});
あなたは実行します。
store.find('post', 123)
あなたのバックエンドがで応答:
{
"id": 123,
// ...
}
あなたが実行します。
:store.find('post', 123, { params: { with: 'comment' } })
あなたのバックエンドがで応答します
{
"id": 123,
// ...,
comments: [
{
"id": 14323,
"post_id": 123,
// ...
},
// ...
]
}
バックエンドでNode.js + JSDataを使用している場合は、照会文字列を正しく解析し、すべてのマッパーのすべてのExpressルートを生成することができます。https://github.com/js-data/js-data-expressをチェックしてください。 js-data-expressを使用すると、上記の例で示したように、バックエンドは要求に正確に応答できます。
あなたは、メモリ内ストアにデータをロードしたら、それは、メモリ内の店舗の外に表示するために必要なデータを引き出すことができ、あなたのビューコンポーネント:
、メモリ内のうち、ポスト#123を取得します店舗:
store.get('post', 123)
は、メモリ内店舗のうち、ポスト#123のコメントを取得します。
store.getAll('comment', 123, { index: 'post_id' })
あなたがDataStore
コンポーネントを使用している場合は、ポストのコメント寿投稿記録自体にも利用可能です。 post.comments
。
関連する問題
- 1. 1つのビューで複数のモデルを扱うOS Xアプリケーション
- 2. 複数のアイテムを1つのコントローラで扱いますか? AngularJS
- 3. 複数のルートを1つのコントローラ
- 4. 1つのモデルで複数のモデルを作成するYii2
- 5. 複数のモデルを1つのレール形式で扱うにはどうすればよいですか?
- 6. Node.jsは1回のリクエストで複数のファイルを扱います
- 7. Rails:1つのモデルから多数のデータサブセットを扱うには?
- 8. 複数のモデルと1つのビュー
- 9. 複数のテーブルが1つのLaravelモデル
- 10. Laravel:1つのリレーション、複数のモデル
- 11. 1つのモデルから複数のビュー
- 12. 角度2 - 1つの観測で複数のサブスクリプションを扱う
- 13. 複数のNugetプロジェクトを1つのソリューションで扱う
- 14. Angular2 1つのコンポーネントで複数のビューを扱う
- 15. Emberデータが同じモデルの複数のインスタンスを1つのルートで取得します
- 16. 1つのモデルの複数のレコードを1つの形式で作成する
- 17. 複数のhas_many_polymorphを1つのモデルに組み込みます
- 18. 複数のモデルを1つのビューで使用する.net Mvc
- 19. 複数のモデルを1つのフォームで更新するレール
- 20. 複数のモデルを1つのアクションで作成する
- 21. NodeJS/ExpressJS - ルート内で複数のミドルウェアを扱う際の問題
- 22. Google Maps v3でウェイポイントで複数のルートを扱う
- 23. 1つのマップに複数のルートを設定する
- 24. 1つのコントローラに複数のルートを作成する
- 25. htaccessを持つ1つのルートに複数のドメインがあります
- 26. MVC複数モデルを1つのビューで作成(更新)する
- 27. RoR:複数のモデルを同じ形式で扱っていますか?
- 28. 1つまたは複数のテーブルで何百万もの行を扱う?
- 29. Django複数の外部キーを1つのモデルで
- 30. エンティティフレームワーク複合型の1つのモデルに複数のインスタンス?
素晴らしい回答!私はまだフォローアップの質問を持っています。したがって、js-dataは、この例のストレージオブジェクトは「コメント」ですが、受信したネストされたフィールドは「コメント」なので、受信したデータから複数のものを解決するには十分スマートですか? – jredd
JSDataは、リレーション定義の "localField"設定により、どのフィールドが埋め込まれたリレーションかを認識します。 – jdobry