【问题标题】:Ember data embedded has one relationship for ember-data.1.0.0Ember 数据嵌入与 ember-data.1.0.0 有一种关系
【发布时间】:2015-02-21 23:15:17
【问题描述】:

我正在尝试序列化用户对象并将其传递给 ember 客户端。我的应用使用 RESTserializer。

一个用户对象有一个地址对象。只有地址没有单独的端点,所以我不能只提供外键 id 并旁加载它。

收到的 JSON 只包含地址作为对象,看起来像这样:

{"user": 
   {
    "id":"5",
    "name":"Andrew",
    "address": 
      { 
        "id":"3",
         "addressable_id":"5",
         "street":"1",
         "country_code":"US"
      }
   }

在 ember 方面我有一个用户模型

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'),

用户模型中的行,但关系未正确加载。

那么我在配置这个时做错了什么?我正在寻找有关这方面的最新文档。

【问题讨论】:

  • 你在使用embedded record mixin吗?
  • 实际上看起来我可能误解了您发送的链接。这可能会解决我的问题。
  • 成功了!如果您重新提交它作为带有某些上下文的答案,我会接受它。太感谢了!我已经为此挣扎了好几个小时。

标签: ember.js ember-data


【解决方案1】:

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

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

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

this excellent answer 中所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2015-11-30
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多