javascript - 在 Ember 数据中加载关系模型

标签 javascript ember.js ember-data

我对 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 的所有评论,例如 posts/id/comments

从商店和服务器获取特定帖子 ID 的评论的正确方法是什么?

我得到的服务器响应只是“findRecord”帖子时评论的 ID。 我遵循 REST API 格式并使用 REST 适配器和 REST 序列化器进行自定义。

提前致谢。

最佳答案

有很多方法可以将这些记录加载到存储中。您选择如何执行此操作取决于后端的设置方式。最简单的选项是使用模板中的子记录或执行查询。以下说明仅适用于使用 REST 适配器的应用(因为 JSONAPI 请求已标准化)。

让我们从使用模板中的记录开始。

在路由中,获取帖子并将其返回到模型 Hook 中:

// 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}}

您应该发现,在模板中使用评论会触发对随初始帖子提取返回的 ID 的 GET 请求,例如 /comments/1/comments/2 等。在组件的操作中,您可以通过 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}}

关于javascript - 在 Ember 数据中加载关系模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46255025/

相关文章:

javascript - jquery .remove() 是否在后代 DOM 元素上触发 .off()

ember.js - Ember 数据 0 有效负载空内容类型

javascript - 找不到变量 : DS in Ember CLI

javascript - Ember-charts 导致无法在对象上找到属性 'pie-chart'

javascript - 在服务中使用 Ember 事件来发布/订阅事件

javascript - 这个正则表达式是什么意思?

javascript - JQuery Slider,如何改变 "step"大小

javascript - 给变量添加引号

javascript - Ember Js : Own View with Value Binding

ember.js - emberjs Handlebars 模板中的不同渲染技术