gpt4 book ai didi

javascript - Ember.js 将多对多关系保存到服务器

转载 作者:行者123 更新时间:2023-11-28 01:46:53 25 4
gpt4 key购买 nike

我有一组名为 ProfileTag 的模型。配置文件可以有多个标签,标签可以属于多个配置文件。我的模型设置如下:

App.Profile = DS.Model.extend({
name: DS.attr(),
tags: DS.hasMany('tag')
});

App.Tag = DS.Model.extend({
title: DS.attr(),
profile: DS.hasMany('profile')
});

我编写了以下代码来测试关系并将数据提交到服务器:

var profile = this.store.createRecord('profile', {
name: 'John Doe'
});

var tag1 = this.store.createRecord('tag', {
title: 'Tag 1'
});

var tag2 = this.store.createRecord('tag', {
title: 'Tag 2'
});

var tag3 = this.store.createRecord('tag', {
title: 'Tag 3'
});

profile.get('tags').pushObject(tag1);
profile.get('tags').pushObject(tag2);
profile.get('tags').pushObject(tag3);

profile.save();

但是,即使我先保存标签,然后再保存配置文件,关系也永远不会发送到服务器。

无论 Ember POST 到 /profiles/ 的数据始终包含 "tags": [ null, null, null ]

编辑:我以错误的方式保存模型,此代码对我有用:

profile.get('tags').save().then(function() {

profile.save();

});

最佳答案

当您保存配置文件时,它会保存标签的名称和 ID。默认情况下发送时,关系不会嵌入到 json 中。它正在发送标签的 ID,该 ID 为空。你需要先保存标签(并且你的服务器需要返回一个id,通常它会返回带有id的整个模型)。然后,当您保存个人资料时,将发送 ID。如果您只想硬编码几个代码来看看它是如何工作的,只需输入 id 即可。

var tag1 = this.store.createRecord('tag', {
title: 'Tag 1',
id:21838123823
});

话虽如此,您可以创建一个自定义序列化器,如果您愿意的话,它可以发送所有内容,但这不是默认的其余适配器/序列化器的工作方式。

关于javascript - Ember.js 将多对多关系保存到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20181574/

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