我有一组名为Profile
和Tag
的模型。配置文件可以包含许多标记,标记可以属于许多配置文件。我的模型设置如下:
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();
});
答案 0 :(得分:1)
保存配置文件时,会保存标签的名称和ID。默认情况下发送时,关系不会嵌入到json中。它正在发送标签的ID,这是空的。您需要先保存标记(并且您的服务器需要返回一个id,通常它会返回带有id的整个模型)。然后,当您保存配置文件时,将发送ID。如果你想硬编码一对夫妇,看看它是如何工作的,只需输入id。
var tag1 = this.store.createRecord('tag', {
title: 'Tag 1',
id:21838123823
});
总而言之,您可以创建一个自定义序列化程序,如果您愿意,可以发送所有内容,但这不是默认的其余适配器/序列化程序的工作方式。