这是我当前拥有的模型结构
// match.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
match: DS.attr('number'),
players: DS.hasMany('player')
});
//player.js
import DS from 'ember-data';
export default DS.Model.extend({
pid: DS.attr('number'),
match: DS.attr('number'),
name: DS.attr('string'),
point: DS.attr('number'),
home: DS.attr('boolean'),
squard: DS.belongsTo('squard'),
selected: DS.attr('boolean', {default: false})
});
我在客户端创建了一个新的小分队,并通过以下代码使用推players
s
let player - this.store.peekRecord('player', id);
let squard = this.store.peekRecord('squard', 1);
squard.get('players').pushObject(player);
我尝试使用squard.save()
,但是并没有发送一系列的玩家信息。如何将这些更改推送到服务器?
答案 0 :(得分:1)
如果要在保存小队时将完整的玩家列表推送到服务器,则需要使用余烬embedded-records mixin。
创建一个小队适配器并将以下内容添加到其中。
import DS from 'ember-data';
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
players: { embedded: 'always' }
}
});
这将导致玩家数组被序列化并包含在小队的有效载荷中。
答案 1 :(得分:1)
使用Trenton Trama的答案所建议的DS.EmbeddedRecordsMixin只能与DS.RESTSerializer一起使用,这不是默认值。
如果使用DS.JSONAPISerializer(它实现了JSON API specification并用作默认设置),则自定义shouldSerializeHasMany()
是更好的方法。
请记住,有充分的理由不完全替代“多对多”的关系。符合JSON API的服务器可能根本不支持它:
注意:由于完全更换可能是非常危险的操作,因此服务器可能会选择不允许这样做。例如,如果服务器未向客户端提供关联对象的完整列表,并且不希望删除客户端未看到的记录,则服务器可能拒绝完全替换。 (Source)