Ember.js 如何添加与Ember数据本地存储适配器/序列化程序的多个关系?

Ember.js 如何添加与Ember数据本地存储适配器/序列化程序的多个关系?,ember.js,ember-data,Ember.js,Ember Data,我正在为一个应用程序使用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('

我正在为一个应用程序使用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')
});
在中,您可以将成员和组织添加到本地存储中,这非常有效(这意味着当我添加新组织时,其所选成员将添加到“members”hasMany关系中)

除了添加新的组织信息外,我还想序列化新创建的组织记录,通过AJAX发送到服务器(不,我不想使用RESTAdapter)

但是,序列化中完全缺少“members”hasMany关系,因此这是我得到的序列化(您可以):

这是我想要的序列化:

{ 
    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));
    }
    ...
如果序列化不是可行的方法,那么另一种方法可能是将“members”设置为字符串数组属性,但到目前为止,这条路径让我失望

除建议外,请提供基于的工作jsbin。因为我知道这不管用


请记住,此应用程序是使用余烬数据本地存储适配器设置的。

您可以使用
DS.EmbeddedRecordsMixin
完成此操作
org serializer.js
看起来像:

import DS from 'ember-data';

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    members: { serialize: 'ids' }
  }
});
请参阅文档

import DS from 'ember-data';

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    members: { serialize: 'ids' }
  }
});