我正在尝试序列化用户对象并将其传递给ember客户端。我的应用程序使用RESTserializer。
用户对象has_one地址对象。只有地址没有单独的端点,因此我不能只提供外键ID并对其进行侧载。
收到的JSON只包含地址作为对象,看起来像这样:
{"user":
{
"id":"5",
"name":"Andrew",
"address":
{
"id":"3",
"addressable_id":"5",
"street":"1",
"country_code":"US"
}
}
在余烬方面,我有一个用户模型
App.User = DS.Model.extend({
name: DS.attr('string'),
address: DS.belongsTo('address'),
//hasOne via belongsTo as suggested by another SO post:
//http://stackoverflow.com/questions/14686253/how-to-have-hasone-relation-with-embedded-always-relation
});
和地址模型
App.Address = DS.Model.extend({
addressable_id: DS.attr('string'),
street: DS.attr('string'),
country_code: DS.attr('string'),
user: DS.belongsTo('user')
});
目前运行此代码会在控制台中抛出错误:
TypeError: Cannot read property 'typeKey' of undefined
可以通过删除
来修复address: DS.belongsTo('address'),
在用户模型中排队,但之后关系没有正确加载。
那么我做错了配置呢?我很快就找到了关于此的最新文档。
答案 0 :(得分:1)
您需要在每种类型的序列化程序上使用DS.EmbeddedRecordsMixin
。
在您的情况下,您需要执行以下操作:
App.UserSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
address: {embedded: 'always'}
}
});