嵌入的Ember数据与ember-data.1.0.0有一个关系

时间:2014-12-23 19:21:54

标签: ember.js ember-data

我正在尝试序列化用户对象并将其传递给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'),

在用户模型中排队,但之后关系没有正确加载。

那么我做错了配置呢?我很快就找到了关于此的最新文档。

1 个答案:

答案 0 :(得分:1)

您需要在每种类型的序列化程序上使用DS.EmbeddedRecordsMixin

在您的情况下,您需要执行以下操作:

App.UserSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    address: {embedded: 'always'}
  }
});

this excellent answer中所述。