4

我正在将 Ember 本地存储适配器用于具有两个模型的应用程序:组织和成员。关系是Organizations“hasMany”Members,Members“belongsTo”Organizations,如下:

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 中,您可以将成员和组织添加到本地存储中,效果很好(这意味着当我添加一个新组织时,其选定的成员会添加到“成员”hasMany 关系中)。

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

但是,序列化中完全缺少“成员” hasMany 关系,所以这是我得到的序列化(如果添加一些成员然后打开控制台,您可以自己查看):

{ 
    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));
    }
    ...

如果序列化不是要走的路,另一种方法可能是让“成员”成为字符串数组属性,但到目前为止,这条路让我失望了。

除建议外,请提供基于应用当前 jsbin 的工作 jsbin 。因为我尝试 了一些不起作用的东西。

请记住,此应用程序设置有 Ember Data 本地存储适配器。

4

1 回答 1

0

您可以使用DS.EmbeddedRecordsMixin. org-serializer.js看起来像:

import DS from 'ember-data';

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

请参阅此处的文档。

于 2015-10-29T19:41:40.660 回答