以下是我尝试使用ember-data加载的JSON数据:
{
"product" : [
{
"id" : 1,
"name" : "product1",
"master" : {
"id" : 1,
"name" : "product1",
"images" : [
{
"id" : 1,
"productUrl" : "/images/product1_1.jpg"
},
{
"id" : 2,
"productUrl" : "/images/product1_2.jpg"
}
]
}
},
{
"id" : 2,
"name" : "product2",
"master" : {
"id" : 2,
"name" : "product2",
"images" : [
{
"id" : 3,
"productUrl" : "/images/product2_1.jpg"
},
{
"id" : 4,
"productUrl" : "/images/product2_2.jpg"
}
]
}
}
]
}
模型如下:
App.Product = DS.Model.extend
name: DS.attr('string')
description: DS.attr('string')
master: DS.belongsTo('master')
App.Master = DS.Model.extend
images: DS.hasMany('image')
App.Image = DS.Model.extend
productUrl: DS.attr('string')
Application Serializer代码如下:
App.ApplicationSerializer = DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin,
attrs: {
images: { embedded : 'always' }
master: { embedded : 'always' }
}
)
问题是“主”模型记录被返回为空。我不确定,我哪里出错了。
我使用以下平台配置:
由于
答案 0 :(得分:0)
有几件事立刻向我跳了出来。首先,您需要完成定义模型以正确接收关系。
App.Product = DS.Model.extend
name: DS.attr('string')
description: DS.attr('string')
master: DS.belongsTo('master')
App.Master = DS.Model.extend
images: DS.hasMany('image')
products: DS.hasMany('product')
App.Image = DS.Model.extend
productUrl: DS.attr('string')
master: DS.belongsTo('master')
在考虑关系ID时,Emberdata与铁路相反。 id键必须存在于父对象上,而不是子对象作为rails中的约定,我假设你的后端正在运行,因为你在ember中使用了活动模型序列化器。
其次,您应该为此数据使用特定于模型的序列化程序,因为您可能会遇到尝试在其他模型中序列化数据的问题。 ember约定是查找与模型同名的序列化程序,以便将序列化程序代码更改为
App.ProductSerializer = DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin,
attrs: {
images: { embedded : 'always' }
master: { embedded : 'always' }
}
)
让ember知道您要将此序列化程序用于产品模型类。
另外,当你说记录返回为空时,它们究竟返回空的状态?它是在灰烬检查员的数据部分吗?或者它是在发送到串行器的有效负载中? ProductRoute课程要求什么?如果没有通过修复模型关系来解决问题,这些是指向找到问题的正确方向的一些事情。
答案 1 :(得分:0)
升级到ember-data-source版本1.0.0-beta.8已解决该问题。
在ember-data版本中< 1.0.0-beta.8,DS.EmbeddedRecordsMixin没有定义serializeBelongsTo函数。这就是原因,该模型没有为belongsTo关系加载。
如果使用ember-rails提供的默认版本之外的ember-data-source,请遵循以下指南: -