gpt4 book ai didi

ember-data - Ember,Ember 数据 - 更新 hasMany 关系

转载 作者:行者123 更新时间:2023-12-01 13:52:42 24 4
gpt4 key购买 nike

我正在尝试更新 Ember 中的 hasMany 关系,但在正确发送数据时遇到了一些麻烦。

我有以下 Ember 模型:

// models/post.js
export default DS.Model.extend({
title: DS.attr('string'),
tags: DS.hasMany('tag', { async: true })
});

// models/tag.js
export default DS.Model.extend({
title: DS.attr('string'),
post: DS.belongsTo('post', { async: true })
});

然后我在我的 route 有以下操作来创建一个新标签并更新帖子:
addTag: function() {
var post = this.get('currentModel');

var newTag = this.store.createRecord('tag', {
title: 'Lorem Ipsum',
post: post
});

newTag.save().then(function() {
post.get('tags').pushObject(newTag);

post.save();
});
}

新标签已成功创建并由我的 Express api 保存,但帖子未正确保存。它由 api 接收,但 Ember 发出的请求负载从不包含标签 ID(尽管它确实发送了标签标题)。我究竟做错了什么?真的很感激任何帮助!

编辑

事实证明,默认情况下 RESTSerializer 不会序列化并包含 hasMany 关系的相关 ID。它只包含它们用于belongsTo 端,因为它希望API 负责在需要的地方保存它。我可能会更改我的 API 以适应这种行为,因为它更有效,但如果其他人遇到这种情况,可以通过扩展序列化程序并使用 DS.EmbeddedRecordsMixin 来使序列化程序包含 ID。 mixin - http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html - 看起来像这样:
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
tags: { serialize: 'ids' }
}
});

最佳答案

您不需要在发布时调用 .save() 。当您调用 createRecord 来创建标签时,您的后端会收到 post 的 id 并且应该相应地保留依赖项。

addTag: function() {
var post = this.get('currentModel');

this.store.createRecord('tag', {
title: 'Lorem Ipsum',
post: post})
.save()
.then(function(tag) {
post.get('tags').pushObject(tag);
});

关于ember-data - Ember,Ember 数据 - 更新 hasMany 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32172184/

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