gpt4 book ai didi

ember.js - 如何添加与 Ember Data 本地存储适配器/串行器的 hasMany 关系?

转载 作者:行者123 更新时间:2023-12-01 06:33:30 24 4
gpt4 key购买 nike

我将 Ember 本地存储适配器用于具有两种模型的应用程序:组织和成员。关系是组织“hasMany”成员和成员“属于”组织,如下所示:

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)。

但是,序列化中完全没有“成员” hasMany 关系,所以这是我得到的序列化(你可以 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 本地存储适配器。

最佳答案

您可以通过 DS.EmbeddedRecordsMixin 来实现. org-serializer.js看起来像:

import DS from 'ember-data';

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

查看文档 here .

关于ember.js - 如何添加与 Ember Data 本地存储适配器/串行器的 hasMany 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17800199/

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