我对Ember Data有一些疑问。 我有一个帖子和评论模型。
//post.js
comments: DS.hasMany('comment')
//blog.js
post: DS.belongsTo('post')
我可以使用
为特定的“帖子”创建评论let blogPost = this.get('store').findRecord('post', 1);
let comment = this.get('store').createRecord('comment', {
post: blogPost
});
但是我如何获取特定帖子的所有评论? 就像,我有多个帖子有很多评论,我想要特定帖子ID的所有评论,比如帖子/ id /评论
从商店和服务器获取特定帖子ID的评论的正确方法是什么?
我得到的服务器响应只是“findRecord”帖子时评论的ID。 我遵循REST API格式并使用REST适配器和REST序列化程序进行自定义。
提前致谢。
答案 0 :(得分:1)
有很多方法可以将这些记录加载到商店中。您如何选择这样做取决于后端的设置方式。最简单的选项是在模板中使用子记录或进行查询。以下说明仅适用于使用REST适配器的应用程序(因为JSONAPI请求已标准化)。
让我们从使用模板中的记录开始。
在路线中,获取帖子并在模型钩子中返回:
// post.js route
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
return this.store.findRecord('post', params.post_id)
},
});
将模型及其子记录传递给组件:
// post.hbs route template
{{some-component comments=model.comments}}
然后使用该组件中的注释:
{{#each comments as |comment|}}
<p>{{comment.note}}<p>
{{/each}}
您应该会发现,使用模板中的评论会触发GET请求,这些请求会返回到您的初始帖子提取时返回的ID,例如/comments/1
,/comments/2
等。在组件中&#39;您可以通过this.get('comments')
另一个选项是指定要由后端接收和处理的查询参数。
// post.js route
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
return this.store.query('comments', {post: params.post_id})
},
});
上面的代码会向/ comments?post = 1发出GET请求。后端负责过滤数据库并仅返回属于帖子的记录。由于模型是评论的集合,因此您可以在以下模板中使用上述结果:
{{#each model as |comment|}}
<p>{{comment.note}}</p>
{{/each}}