csw*_*ght 6 ember.js ember-data json-api
关于JSON API响应键"类型"与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!"
}
}]
}
Run Code Online (Sandbox Code Playgroud)
我假设我的模型名称应该是单数但是会弹出这个错误
Assertion Failed: You tried to push data with a type 'photos' but no model could be found with that name
Run Code Online (Sandbox Code Playgroud)
当然,这是因为我的模型被命名为"照片"
现在,在JSON API规范中,有一条注释"此规范与变形规则无关,因此type的值可以是复数或单数.但是,在整个实现中应始终使用相同的值."
所以,
tl; dr服务器的"Ember方式"是否具有模型名称和JSON API响应键"类型"都是单数的?或者只要匹配就没关系?
JSON API序列化程序需要多种类型.指南中的有效载荷示例.
由于modelNameFromPayloadKey函数单一化键,它适用于奇异类型:
// as is
modelNameFromPayloadKey: function(key) {
return singularize(normalizeModelName(key));
}
Run Code Online (Sandbox Code Playgroud)
但是payloadKeyFromModelName如果在后端使用单数类型,则逆操作会使模型名称复数并且应该更改:
// as is
payloadKeyFromModelName: function(modelName) {
return pluralize(modelName);
}
Run Code Online (Sandbox Code Playgroud)
内部Ember Data JSON API格式与JSONAPISerializer使用的格式略有不同很重要.Store.push期望奇异类型,JSON API序列化器期望复数.
从讨论:
"... ED在内部使用camelCased属性和单数类型,无论你使用什么适配器/串行器.
当您使用JSON API适配器/序列化器时,我们希望用户能够使用jsonapi.org上提供的示例并使其正常工作.大多数用户从不关心内部格式,因为序列化程序处理它们的工作.
这些在指南中有记录,http://guides.emberjs.com/v2.0.0/models/pushing-records-into-the-store/ ..."
| 归档时间: |
|
| 查看次数: |
1856 次 |
| 最近记录: |