ember.js - JSON API 响应和 ember 模型名称

标签 ember.js ember-data json-api

关于与 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/

相关文章:

ember.js - 反序列化和规范化有什么区别?

javascript - Ember 2,使用 Ember.run.debounce 调用路由中的函数

binding - Ember.TextArea 通过 Handlebars 助手设置输入

javascript - Ember-Data:DS.EmbeddedRecordsMixin 的预期使用模式

ember.js - Ember 数据别名模型/映射 JSON 响应

nginx - 如何使Wordpress JSON-API在Nginx服务器上工作?

rest - 部分响应是否非 RESTful

ember.js - 无法读取 Ember.DefaultResolver.extend.podBasedComponentsInSubdir 未定义的属性 'match'

javascript - 使用来自 javascript 的 json api 上传到谷歌云存储

javascript - Ember 未知关系