【问题标题】:Ember data bulk fetch async hasMany relationship recordsEmber 数据批量获取 async hasMany 关系记录
【发布时间】:2018-09-29 17:53:01
【问题描述】:

我想知道是否可以通过在单个请求中加载异步 hasMany 关系的方式来配置 Ember 数据。

给定以下模型:

// models/post.js
export default DS.Model.extend({
  comments: DS.hasMany()
});

// models/comments.js
export default DS.Model.extend({
  ...
});

当我在模板或控制器的某处引用属性 comments 时,它将在单独的请求中一一获取帖子的相关 cmets。这会导致许多请求,我想将这些请求组合成一个请求,并在 id-property 上进行过滤。

【问题讨论】:

标签: ember.js ember-data json-api


【解决方案1】:

您必须为所需的行为启用一个名为 coalesceFindRequests: true 的开关,您可以像这样在应用程序适配器中设置它:

// adapters/application.js
import DS from 'ember-data';

export default DS.RESTAdapter.extend({
    coalesceFindRequests: true,
});

现在 Ember 将通过 ..api/comments?ids[]=1&ids[]=2 获取多个已知 id 的记录

我想 JSONAdapter 也一样。

【讨论】:

  • 谢谢!这正是我想要的!
  • “我想 JSONAPIAdapter 也是一样的”,是的,你是对的。 JSONAPIAdapter 也有 coalesceFindRequests 属性。我认为它应该是true 作为默认值,但目前它仍然是false。因此,如果您想使用此功能,您需要自己启用它。
【解决方案2】:

是的,你应该使用链接关系:

而不是这个:

relationships: {
    commend: {
        data: [
            { id: '1', type: 'comment' },
            { id: '2', type: 'comment' }
        ]
    }
}

这样做:

relationships: {
    comments: {
        links: {
            related: 'http://example.com/post/A/comments'
        }
    }
}

这样做的好处是您可以在后端进行 100% 调整。

【讨论】:

  • 感谢您的快速回复。如果大多数相关的comments 已经在客户端存储中怎么办?然后它将重新获取数据。我想在(也许)一个 ember 适配器中看到一个解决方案,它检测到必须查询同一模型的多个资源,然后它将 id 组合在一个请求中而不获取许多记录,例如:/api/comments/?id=1,3,23
猜你喜欢
  • 2016-10-25
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 2015-10-20
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多