gpt4 book ai didi

ember.js - Ember {嵌入: 'always' } on model Vs Serializer

转载 作者:行者123 更新时间:2023-12-01 05:02:40 24 4
gpt4 key购买 nike

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

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

import DS from 'ember-data';

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

从 Ember 页面引用以下内容

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

我也见过这样写的模型。
App.Child = DS.Model.extend({
name: DS.attr('string'),
toys: DS.hasMany('toy', {embedded: 'always'}),
});

子对象嵌入了玩具对象的位置。

通过第一个示例,我可以编写如下的子 serailizer 吗?
App.ChildSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
toys: {embedded: 'always'}
}
});

谁能帮我理解这两者之间的区别 {embedded: 'always'}什么时候用?

谢谢

最佳答案

简答 : 是的,你可以,你应该。

好吧,据我所知,ember(尤其是 ember-data)是为与 Rails 后端完美配合而构建的。

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

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

Ember 可能鼓励在序列化程序中使用它,因为将它放入模型中似乎只与特定的 Rails 选项相关,而且一点也不简单。此外,将其放入序列化程序中即可完成此角色,无论是否有ActiveModelSerializer .

希望对您来说很清楚,如果没有,请告诉我,以便我进行编辑。

关于ember.js - Ember {嵌入: 'always' } on model Vs Serializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31587135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com