我将Ember本地存储适配器用于具有两个模型的应用程序:组织和成员。关系是组织“有很多”成员,成员“属于”组织,如下:
App.Org = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
members: DS.hasMany('App.Member')
});
App.Member = DS.Model.extend({
name: DS.attr('string'),
org: DS.belongsTo('App.Org')
});
在jsbin of the app中,您可以将成员和组织添加到本地存储中,这样可以完美地工作(这意味着当我添加新组织时,其选定的成员将添加到“成员”中的hasMany关系中)。
除了添加新的组织信息之外,我还希望将新创建的组织记录序列化,以便通过AJAX发送到服务器(不,我不想使用RESTAdapter)。
但是,“成员”之间的序列化完全没有关系,所以这是我得到的序列化(你可以see for yourself if you add some members and then open up the console):
{
name: "Organization name",
description: "description of the org"
}
这是我想要的序列化:
{
name: "Organization name",
description: "description of the org",
members: ["id_of_member_1", "id_of_member_2", "id_of_member_3"]
}
这就是我进行序列化的方式:
App.OrganizationController = Ember.ArrayController.extend({
createOrg: function(){
var neworg = App.Org.createRecord({
name: this.get('newname'),
description: this.get('newdescription')
});
neworg.get('members').pushObjects(this.get('newmembers'));
neworg.save();
var serializer = DS.RESTSerializer.create({});
console.log(serializer.serialize(neworg));
}
...
如果序列化不是可行的方法,另一种方法可能是使“成员”成为字符串数组属性,但到目前为止,这条路径已经失败了。
除了建议之外,请根据current jsbin of the app提供有效的jsbin。因为我tried things无效。
请记住,此应用程序是使用Ember Data本地存储适配器设置的。
答案 0 :(得分:0)
您可以使用DS.EmbeddedRecordsMixin
执行此操作。 org-serializer.js
看起来像是:
import DS from 'ember-data';
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
members: { serialize: 'ids' }
}
});
请参阅文档here。