Ember {embedded:' always'在模型Vs Serializer

时间:2015-07-23 12:18:09

标签: ember.js ember-data

我正在阅读Ember文档以及在Ember中使用嵌入式对象(如JSON)的一些示例。

我遇到了EmbeddedRecordsMixin功能,发现我们可以编写如下代码来告诉它是嵌入式记录。

import DS from 'ember-data';

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    author: { embedded: 'always' },
  }
});

从Ember页面开始讨论以下内容

请注意,使用{embedded:' always'与{embedded:'始终'无关}这被定义为DS.attr上的一个选项,作为在使用ActiveModelSerializer时定义模型的一部分。然而,使用{embedded:' always' }作为DS.attr的选项不是设置嵌入记录的有效方法。

我也看过这样的模型。

App.Child = DS.Model.extend({
  name: DS.attr('string'),
  toys: DS.hasMany('toy', {embedded: 'always'}),
});

子对象嵌入了玩具对象。

按照第一个例子,我可以像下面那样编写儿童选择器吗?

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

有人可以帮我理解这两个{embedded: 'always'}之间的差异以及什么时候使用?

由于

1 个答案:

答案 0 :(得分:0)

简短回答:是的,你可以而且你应该。

嗯,据我所知,ember(特别是ember-data)可以与Rails backEnd完美配合。

Rails有一个名为ActiveModelSerializer的模块来序列化资源及其相关的属性和关系。在此模块中,您可以使用选项embedded: 'always'来序列化整个目标关系,而不仅仅是客户端请求资源时的ID。 如果您使用它Rails侧(服务器),如果您希望您的ember-data存储轻松处理它,您可以通过将此选项放入模型来处理Ember端(客户端)。它只是这个ActiveModelSerializer模块功能的“回声”。

另一方面,如果您创建/更新具有多个关系的对象,则有两种方法可以处理它。第一种是先保存对象的关系,然后在成功时保存对象本身。第二种是立即将它发送到您的服务器,使用选项{embedded:'always'}进入模型的序列化器,进入您想要在对象本身同时发送(嵌入)的关系。

Ember可能会鼓励将它用于序列化程序,因为将其放入模型似乎只与特定的Rails选项有关,而且根本不是直截了当的。此外,无论有没有ActiveModelSerializer

,将此功能放入序列化程序即可实现此角色

希望你能清楚,如果没有,请告诉我,以便我可以编辑。