【问题标题】:Ember.js JSON API confusionEmber.js JSON API 混淆
【发布时间】:2016-03-23 08:15:54
【问题描述】:

我目前正在尝试使用 Ember 版本 2.2.0 和 Ember Data 2.2.1 创建一个简单的 Ember 应用程序。我创建了我的 REST API 以遵循 JSON API 规范 v1.0,这是使用 GET /articles 检索的资源数组的示例

{
  "links" : {
    "self" : "http://localhost:8080/test-app/rest/articles"
  },
  "data" : [
    {
      "id" : "5666157634499515eb7e13f0",
      "type" : "articles",
      "attributes" : {
        "title" : "test"
      }
    },
    {
      "id" : "5666157634499515eb7e13f1",
      "type" : "articles",
      "attributes" : {
        "title" : "test2"
      }
    },
    ...
  ]
}

我的文章路径如下所示:

// routes/articles.js
...
export default Ember.Route.extend({
  model() {
    return this.store.findAll('article');
  }
});

和模型:

// models/article.js
...
export default DS.Model.extend({
  title: DS.attr(),
  text: DS.attr(),
  url: DS.attr(),
  date: DS.attr()
});

我完全按照教程 (https://guides.emberjs.com/v2.2.0/tutorial/ember-data/) 进行操作。然而,当我打开视图时,我收到一条警告:

WARNING: Encountered "data" in payload, but no model was found for model name "datum" (resolved model name using test-app@serializer:-rest:.modelNameFromPayloadKey("data"))

并且没有数据被渲染。我可以看到正确请求和返回的数据,但它以某种错误的方式解释。

我的问题是:出了什么问题?我试图坚持使用默认 API 不编写任何适配器或序列化程序,但它不起作用。

--

更新:我将“链接”部分添加到响应对象中,现在我收到两个警告:

WARNING: Encountered "links" in payload, but no model was found for model name "link" (resolved model name using test-app@serializer:-rest:.modelNameFromPayloadKey("links"))
WARNING: Encountered "data" in payload, but no model was found for model name "datum" (resolved model name using test-app@serializer:-rest:.modelNameFromPayloadKey("data"))

--

更新 2:所以我通过将 API 响应重组为如下所示来实现这一点:

{
  "articles" : [ {
    "id" : "5666157634499515eb7e13f0",
    "attributes" : {
      "title" : "test"
    }
  }, {
    "id" : "5666141034499511aea5f43c",
    "attributes" : {
      "title" : "test"
    }
  },
  ...
}
  • 将“data”重命名为“articles”,它特定于请求的资源和请求类型(获取一个,获取多个)
  • 从资源对象中删除了“属性”,现在直接包含所有属性
  • 删除了根对象中“文章”旁边的所有键

我在这里看到了这个:ember data no model was found for attribute name 我不明白为什么这是有效的,但 ember 教程中的示例不是。本教程适用于我正在使用的 ember 2.2.0。我通过 ember cli 创建了我的项目,然后将 ember 版本 1.13 替换为 2.2.0。

--

更新 3:修复了这个问题。看我的回答(我还不能接受)。基本上,我使用了错误的 REST 适配器。 ember-cli 使用 RESTAdapter 生成默认适配器,并且必须将其更改为 JSONAPIAdapter。

【问题讨论】:

    标签: javascript json rest ember.js


    【解决方案1】:

    问题在于 Ember 默认使用 RESTAdapter。要将此响应格式与 JSON API 一起使用,必须使用 JSONAPIAdapter。所以在 app/adapters/application.js 中:

    export default DS.JSONAPIAdapter.extend({
        ...
    });
    

    并将每个 API 响应的内容类型更改为 application/vpn.api+json,如规范中所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多