Хранение emberjs имеет много моделей на сервере? - PullRequest
0 голосов
/ 25 июня 2018

Итак, вот модель структуры, которая у меня есть на данный момент

// 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})
});

Я создаю новый отряд на стороне клиента и использую push players s, используя следующий код

let player - this.store.peekRecord('player', id);
let squard = this.store.peekRecord('squard', 1);
squard.get('players').pushObject(player);

Я пытался использовать squard.save(), но это не отправляет множество игроков с ним. Как я могу отправить эти изменения на сервер?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Использование DS.EmbeddedRecordsMixin в соответствии с предложением Трентона Трама следует использовать только вместе с DS.RESTSerializer , который не является значением по умолчанию.

При использовании DS.JSONAPISerializer , который реализует спецификацию JSON API и используется по умолчанию, поэтому настройка shouldSerializeHasMany() является более подходящим способом.

Есть вИмейте в виду, что есть веские причины не делать полную замену отношений "есть много".Сервер, совместимый с JSON API, может вообще его не поддерживать:

Примечание. Поскольку полная замена может быть очень опасной операцией, сервер может запретить ее.Например, сервер может отклонить полную замену, если он не предоставил клиенту полный список связанных объектов и не хочет разрешать удаление записей, которые клиент не видел.( Источник )

0 голосов
/ 25 июня 2018

Если вы хотите выдвинуть полный список игроков на сервер при сохранении отряда, вы можете использовать ember embedded-records mixin .

Создать адаптер отрядаи добавьте к нему следующее.

import DS from 'ember-data';

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    players: { embedded: 'always' }
  }
});

Это приведет к тому, что массив игроков будет сериализован и включен в полезную нагрузку отряда.

...