我正在阅读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'}
之间的差异以及什么时候使用?
由于
答案 0 :(得分:0)
简短回答:是的,你可以而且你应该。
嗯,据我所知,ember(特别是ember-data)可以与Rails backEnd完美配合。
Rails有一个名为ActiveModelSerializer
的模块来序列化资源及其相关的属性和关系。在此模块中,您可以使用选项embedded: 'always'
来序列化整个目标关系,而不仅仅是客户端请求资源时的ID。
如果您使用它Rails侧(服务器),如果您希望您的ember-data存储轻松处理它,您可以通过将此选项放入模型来处理Ember端(客户端)。它只是这个ActiveModelSerializer模块功能的“回声”。
另一方面,如果您创建/更新具有多个关系的对象,则有两种方法可以处理它。第一种是先保存对象的关系,然后在成功时保存对象本身。第二种是立即将它发送到您的服务器,使用选项{embedded:'always'}进入模型的序列化器,进入您想要在对象本身同时发送(嵌入)的关系。
Ember可能会鼓励将它用于序列化程序,因为将其放入模型似乎只与特定的Rails选项有关,而且根本不是直截了当的。此外,无论有没有ActiveModelSerializer
。
希望你能清楚,如果没有,请告诉我,以便我可以编辑。