当前位置:  开发笔记 > 编程语言 > 正文

Ember.js JSON API混乱

如何解决《Ember.jsJSONAPI混乱》经验,为你挑选了1个好方法。

我目前正在尝试用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"
    }
  },
  ...
}

将"数据"重命名为"文章",这些文章特定于请求的资源和请求类型(获取一个,获得许多)

从资源对象中删除"属性",现在直接包含所有属性

删除了根对象中"articles"旁边的所有键

我在这里看到了这个:ember数据没有找到属性名称的模型 我不明白为什么这个工作但是ember教程中的例子不是.本教程适用于我正在使用的ember 2.2.0.我通过ember cli创建了我的项目,然后用2.2.0替换了ember版本1.13.

-

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



1> Eike Cochu..:

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

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

application/vpn.api+json按照规范中的描述更改每个API响应的内容类型.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有