嵌入式记录未在Ember.js中加载

时间:2014-06-07 11:54:09

标签: ember.js ember-data

以下是我尝试使用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' }
}
)

问题是“主”模型记录被返回为空。我不确定,我哪里出错了。

我使用以下平台配置:

  • ember-source(1.4.0)
  • ember-data-source(1.0.0.beta.7)
  • ember-rails(0.15.0)
  • Rails(4.1.0)

由于

2 个答案:

答案 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,请遵循以下指南: -

https://github.com/emberjs/ember-rails#updating-ember