如何使用 Ember 适配器发出多个请求

How do I make multiple requests with an Ember adapter?

本文关键字:请求 何使用 Ember 适配器      更新时间:2023-09-26

我正在构建一个以Parse作为后端的Ember应用程序。开箱即用的解析对关系做了一些奇怪的事情——它们只以一种方式工作。:/我一直在尝试通过将两个模型保存在 Ember 中来手动使关系双向工作,但这似乎很混乱,可能意味着数据很容易不同步。呸。所以现在我正在寻找替代方案。

首先,让我更详细地解释一下。

假设我有一个postcomments.Parse 将存储来自 comments -> post 的关系,但不会存储相反。或者,我可以管理"指针数组"中的comments列表,但不能管理来自 comments -> post 的一对一关系。

我看到两个选项:

  1. 使用其云代码平台修改 API 的工作方式。这可能是更简单的途径,但我宁愿在 Ember 中解决这个问题,这样我就可以为遇到此问题的其他人开源我的适配器/序列化程序。
  2. 找出一种在我的适配器中发出多个请求的方法。我想它会像这样工作:

    一个。 this.store.findRecord('post', id)在应用代码中调用。

    b. 余烬适配器根据模型中定义的内容看到post具有hasMany关系。

    三.适配器生成一个 url,用于查找帖子 id 与我试图查找的 id 匹配的评论(使用 Parse 很容易做到)。是的,这意味着多个请求,但只有 1 个请求(每个关系)。这类似于 Ember 在有效负载中有 links 属性时所做的,但我们没有,因为 Parse 无法识别hasMany关系。

寻找两件事。首先,关于我是否正确考虑这个问题的任何想法,或对其他选择的建议。其次,可能也是最重要的,关于我可以在我的适配器中锁定什么钩子以触发第二个请求的一些想法。我最初的想法是这样的:

findRecord: function(store, type, id, snapshot) {
  snapshot.eachRelationship(relationship => {
    // Do something to build a url for each hasMany relationship
  });
  return Ember.RSVP.promise(...);
}

非常感谢对此的任何帮助。

所以,基本上你试图覆盖默认的 findRecord for ember-data 的行为。

您目前的方法听起来是正确的。您可以创建适配器并为 findRecord、findAll、query 等方法提供自定义定义。

一个典型的代码示例可以是:

findRecord(store, type, id, snapshot) {
    let data = {};
    const traditional = true;

    return new Ember.RSVP.hash({
        news: Ember.$.ajax({ url: wpUrl + 'post', dataType: "jsonp", type: 'GET' }),
        events: Ember.$.ajax({ url: wpUrl + 'comments', dataType: "jsonp", type: 'GET' })
    });
});

代码片段完全模糊,但我希望你明白我的意思。