Ember数据对第3层的嵌入式记录进行序列化/反序列化 [英] Ember-data Serialize/Deserialize embedded records on 3rd level

查看:262
本文介绍了Ember数据对第3层的嵌入式记录进行序列化/反序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请原谅我,以获得这个头衔,但我真的不知道如何问这个,所以我只是解释一下。
模型:组(已)用户(已)发布
定义为:

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

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

// models / post.js
名称:DS.attr('string'),
用户:DS。 belongsTo('user'),

当我要求 / posts ,我的服务器返回这个嵌入式记录:

  {
posts:[
{
id:1,
name:Whitey,
user:{
id:1,
name 用户1,
组:2
}
}
]
}

请注意,没有组记录,而不是id。



使用我的序列化程序:

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

// serializers / post.js
导出默认DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin,{
attrs:{
user:{embed:'always '}
}
});

这将期望用户 Post 模型在其中嵌入了记录。但是,它需要一个问题,因为在json响应中没有嵌入的记录。



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



请帮助。

解决方案

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



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)serialize和2)反序列化。这两个选项有三个选项:


  1. 'no' - 不包含任何数据

  2. 'id'或'id' - 包含id(s),

  3. 'records' - 包含数据

当您写入 {embed:'always'} 这是简单的: {serialize:'records',deserialize:'records '}



如果你不想发送关系,请写: {serialize:false} / code>。



EmbeddedRecordsMixin 的Ember默认值如下所示:



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



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


Pardon me for coming up with this title but I really don't know how to ask this so I'll just explain. Model: Group (has) User (has) Post Defined as:

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

When I request /posts, my server returns this embedded record:

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

Notice that the group didn't have the group record but an id instead.

With my serializers:

// 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'}
    }
});

This expects that the User and Post model have embedded records in them. However, it entails a problem since in the json response doesn't have an embedded group record.

The question is, is there a way I can disable embedding records in the 3rd level?

Please help.

解决方案

Here is a good article about serialization:

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

Ember docs:

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

Basically, what it says is that you have 2 options 1) serialize and 2) deserialize. Those two have 3 options:

  1. 'no' - don't include any data,
  2. 'id' or 'ids' - include id(s),
  3. 'records' - include data.

When you write {embedded: 'always'} this is shorthand for: {serialize: 'records', deserialize: 'records'}.

If you don't want the relationship sent at all write: {serialize: false}.

The Ember defaults for EmbeddedRecordsMixin are as follows:

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

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

这篇关于Ember数据对第3层的嵌入式记录进行序列化/反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆