我的drf后端有这个模型:
class Product:
price_range = ...
我正在使用EmberData和JSONApi序列化程序。我刚刚发现JSON API需要dasherized属性。所以我需要告诉drf:
JSON_API_FORMAT_KEYS = 'dasherize'
该属性在JSON
中序列化为:
price-range
然后,EmberData
跳舞,我得到Ember
模型属性:
import DS from 'ember-data';
export default DS.Model.extend({
...
priceRange: DS.attr('number'),
...
});
(旧的RESTSerializer
期待priceRange
中的JSON
,如果我没记错的话)
所以,我们来自price_range
- > price-range
- > priceRange
(如果你问我,那真是太疯狂了)。我通过反复试验找到了这一切。对于drf,相应的设置记录为here。
JSONApi
,EmberData
和Ember
记录了哪些内容?我想确保我真的理解这一点,这也是关系的情况。相关的drf
配置设置为:
JSON_API_FORMAT_RELATION_KEYS = 'dasherize'
答案 0 :(得分:5)
在blog post for the Ember-Data 1.13
release中,Ember数据小组写道:
JSONSerializer和RESTSerializer已经过重构和简化 返回JSON API有效负载。
这意味着向前推进Ember Data需要符合JSON API的符号化名称。见the JSON API recommendation for dashes in between words of member names:
会员名称应该只包含字符“a-z”(U + 0061到 U + 007A),“0-9”(U + 0030至U + 0039),连字符减(U + 002D) HYPHEN-MINUS,“ - ”)作为多个单词之间的分隔符。
在JSON API主页上查看一些示例JSON:
-"attributes": {
"first-name": "Dan",
"last-name": "Gebhardt",
"twitter": "dgeb"
},
就模型而言,the most recent documentation for Ember 2.2.0表示:
在Ember Data中,惯例是在模型上使用属性名称
使用mutli-world属性名称给出的示例模型符合预期:
export default DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
isPersonOfTheYear: DS.attr('boolean')
});
虽然推荐的命名约定确实存在流失,但我预计此时大多数这些更改都在我们身后。核心团队已经注意到了。我相信可以围绕JSON API进行标准化,以便可以构建可互操作和可重复使用的工具,但不幸的是,这一变化伴随着这些变化。
总结:在您的模型中使用JSON中的虚线名称和驼峰名称。
编辑: 似乎虽然Ember Data团队采用了JSON API关于JSON有效负载中属性名称的建议,但它只是一个推荐。有关JSON API,请参阅GitHub regarding the dasherized naming convention上的讨论。