Ember.js JSON API响应和余烬模型名称

Ember.js JSON API响应和余烬模型名称,ember.js,ember-data,json-api,Ember.js,Ember Data,Json Api,一个关于JSON API响应键“type”与Ember模型名称匹配的快速问题 如果我有一个模型,比如说“models/photo.js”,我有一个类似于“/photos”的路由,我的JSON API响应如下所示 { data: [{ id: "298486374", type: "photos", attributes: { name: "photo_name_1.png", description: "A photo!" } },

一个关于JSON API响应键“type”与Ember模型名称匹配的快速问题

如果我有一个模型,比如说“models/photo.js”,我有一个类似于“/photos”的路由,我的JSON API响应如下所示

{
  data: [{
    id: "298486374",
    type: "photos",
    attributes: {
      name: "photo_name_1.png",
      description: "A photo!"
    }
  },{
    id: "298434523",
    type: "photos",
    attributes: {
      name: "photo_name_2.png",
      description: "Another photo!"
    }
  }]
}
我假设我的模型名应该是单数的,但是这个错误突然出现了

Assertion Failed: You tried to push data with a type 'photos' but no model could be found with that name
当然,这是因为我的模型名为“照片”

现在在JSON API规范中有一条注释:“该规范对屈折变化规则是不可知的,因此type的值可以是复数或单数。但是,在整个实现中应该一致地使用相同的值。”

所以


tl;dr是使模型名和JSON API响应键“type”都是单数的“Ember方式”吗?或者只要它们匹配就无所谓了?

JSON API序列化程序需要复数类型

由于
modelNameFromPayloadKey
函数对键进行奇数化,因此它可用于奇数类型:

// as is
modelNameFromPayloadKey: function(key) {
  return singularize(normalizeModelName(key));
}
但是反向操作
payloadKeyFromModelName
使模型名称复数化,如果您在后端使用单数类型,则应进行更改:

// as is
payloadKeyFromModelName: function(modelName) {
  return pluralize(modelName);
}
重要的是,内部Ember数据JSON API格式与JSONAPISerializer使用的格式略有不同
Store.push
expected单数类型,JSON API序列化程序expected复数

发件人:

“…ED在内部使用camelCased属性和单一类型,而不管您使用的是什么适配器/序列化程序

当您使用JSON API适配器/序列化程序时,我们希望用户能够使用jsonapi.org上提供的示例并使其正常工作。大多数用户不必关心内部格式,因为序列化程序为他们处理工作

指南中记录了这一点,
…“

根据您的用例,您可能会尝试而不是。正如所建议的那样,它实现了一些正常化;在我的例子中,它涵盖了“复数vs.单数”问题。

JSON API序列化程序需要复数类型。你从哪里得到错误?你使用store.push吗?是的,我正在构建一个测试响应并使用store.push。再次感谢!啊!!谢谢你,我应该更仔细地阅读那篇指南