Ember-data序列化/反序列化第3级的嵌入式记录

时间:2014-09-08 15:39:04

标签: ember.js ember-data

请原谅我提出这个标题,但我真的不知道怎么问这个,所以我只是解释一下。 型号:组(有)用户(有)发布 定义为:

// models/group.js
name: DS.attr('string'),

// models/user.js
name: DS.attr('string'),
group: DS.belongsTo('group')

// models/post.js
name: DS.attr('string'),
user: DS.belongsTo('user'),

当我请求/posts时,我的服务器返回此嵌入记录:

{
  "posts": [
    {
      "id": 1,
      "name": "Whitey",
      "user": {
        "id": 1,
        "name": "User 1",
        "group": 2
      }
    }
  ]
}

请注意,group没有组记录,而是ID。

使用我的序列化器:

// serializers/user.js
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
    attrs: {
        group: {embedded: 'always'}
    }
});

// serializers/post.js
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
    attrs: {
        user: {embedded: 'always'}
    }
});

这需要UserPost模型在其中嵌入记录。但是,它会带来一个问题,因为在json响应中没有嵌入的group记录。

问题是,有没有办法可以在第3级禁用嵌入记录?

请帮忙。

1 个答案:

答案 0 :(得分:4)

这是一篇关于序列化的好文章:

http://www.toptal.com/emberjs/a-thorough-guide-to-ember-data#embeddedRecordsMixin

Ember docs:

http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html

基本上,它说的是你有2个选项1)序列化和2)反序列化。这两个有3个选项:

  1. '无' - 不包含任何数据,
  2. ' ID'或者' ids' - 包括id(s),
  3. '记录' - 包括数据。
  4. 当您撰写{embedded: 'always'}时,这是:{serialize: 'records', deserialize: 'records'}的缩写。

    如果您不想发送所有关系,请写下:{serialize: false}

    EmbeddedRecordsMixin 的Ember默认值如下:

    BelongsTo:{serialize:'id', deserialize:'id'}

    HasMany:{serialize:false, deserialize:'ids'}