关于与 Ember 模型名称匹配的 JSON API 响应键“类型”的简单问题。
如果我有一个模型,例如“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 响应键“类型”都是单数的“Ember 方式”吗?或者只要它们匹配就没关系?
最佳答案
JSON API 序列化程序需要复数类型。 Payload example from guides.
由于 modelNameFromPayloadKey
函数将 key 单数化,因此它适用于单数类型:
// as is
modelNameFromPayloadKey: function(key) {
return singularize(normalizeModelName(key));
}
但是逆操作 payloadKeyFromModelName
会使模型名称复数,如果您在后端使用单数类型,则应该更改:
// as is
payloadKeyFromModelName: function(modelName) {
return pluralize(modelName);
}
重要的是,内部 Ember Data JSON API 格式与 JSONAPISerializer 使用的格式略有不同。 Store.push
需要单数类型,JSON API 序列化程序需要复数类型。
来自discussion :
“...ED 在内部使用驼峰命名属性和单数类型,无论您使用什么适配器/序列化器。
当您使用 JSON API 适配器/序列化器时,我们希望用户能够使用 jsonapi.org 上提供的示例并让它正常工作。大多数用户永远不必关心内部格式,因为序列化器会为他们处理工作。
这已记录在指南中,http://guides.emberjs.com/v2.0.0/models/pushing-records-into-the-store/ ...”
关于ember.js - JSON API 响应和 ember 模型名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832065/