Обзор структуры сериализаторов в сгенерированных приложениях.

Описание

Для каждой модели должен быть описан сериализатор для корректного взаимодействия с сервером. Сериализаторы располагаются в папке serializers и их имя соответствует имени модели.

В настоящее время в технологии Flexberry Ember определён базовый сериализатор, наследованнный от DS.RESTSerializer, а также базовый офлайн-сериализатор, наследованный от DS.JSONSerializer.

Генерируемые из Flexberry Designer сериализаторы чаще всего имеют следующую структуру

import { Serializer as AgregatorClassSerializer } from
  '../mixins/regenerated/serializers/i-i-s-gen-test-agregator-class';
import __ApplicationSerializer from './application';

export default __ApplicationSerializer.extend(AgregatorClassSerializer, {
  // Имя поля, где хранится первичный ключ.
  primaryKey: '__PrimaryKey'
});

Для каждого сериализатора в папку mixins\regenerated\serializers генерируется миксин следующего вида (также там присутствует миксин для офлайн-сериализатора с аналогичным именем):

import Mixin from '@ember/object/mixin';
import $ from 'jquery';

export let Serializer = Mixin.create({
  getAttrs: function () {
    let parentAttrs = this._super();
    let attrs = {
      child2: { serialize: 'odata-id', deserialize: 'records' },
      masterForAgregator: { serialize: 'odata-id', deserialize: 'records' },
      detailForAgregator: { serialize: false, deserialize: 'records' }
    };

    return $.extend(true, {}, parentAttrs, attrs);
  },
  init: function () {
    this.set('attrs', this.getAttrs());
    this._super(...arguments);
  }
});
  • attrs - описание всех ссылок на мастеров и детейлов (только первого уровня), которые присутствуют в модели с учётом наследованных от базовой модели.
  • ссылкаНаМастераИлиАгрегатор: { serialize: 'odata-id', deserialize: 'records' } - описание для ссылок на мастера (или агрегатора детейла). ссылкаНаМастераИлиАгрегатор - это имя мастерового свойства в модели (или имя ссылки на агрегатор). В конкретном примере ссылками на мастера являются child2 и masterForAgregator.
  • ссылкаНаДетейл: { serialize: false, deserialize: 'records' } - описание для ссылок детейлов. ссылкаНаДетейл - это имя детейлового свойства в модели. В конкретном примере ссылкой на детейл является detailForAgregator.
  • odata-id - особый тип отношения для сериализаторов, обрабатываемый базовым сериализатором OData технологии Flexberry Ember. Используется для передачи сведений о мастерах в правильном odata-формате (такая конструкция будет в запросе, например, при сохранении модели):
'<ИмяСвязиДоМастера>@odata.bind': '<ТипМастера>s(<ИдентификаторМастера>')
Например, "'ReportsTo@odata.bind': 'Employees(502431BA-3B85-4A97-AF53-7AD193ED6AEC)'"