Запуск нескольких сериализаторов для встроенных моделей в miragejs

Я работаю с reactjs и использую чтобы miragejs,имитировать бэкэнд. У меня две модели: User и Event. Каждый пользователь hasMany события и каждое событие ownedByПользователь. Я использую фабрику для имитации событий, которая дает событию только время начала. Поскольку время начала рандомизировано, я не могу сгенерировать время окончания на фабрике, поэтому делаю это, когда событие сериализуется. Как видите, в части сериализатора я проверяю, существует ли свойство. Если это не так, я добавляю endсобственность к нему. Однако когда я бегу schema.users.all() только users вызывается сериализатор, а не встроенный eventобъекты. Можно ли настроить Mirage так, чтобы работали оба сериализатора? Я просмотрел документацию miragejs для сериализаторов, и в ней говорится, что функция сериализатора

Возвращает простой объект или массив JavaScript, которые Mirage использует в качестве данных ответа на запрос XHR вашего приложения.

Означает ли это, что когда-либо может работать только один сериализатор, который является верхним уровнем или родительской моделью. В этом случае user?

Фабрика событий

      export const factories = {
  ...
  event: Factory.extend({
    title: 'Title',
    start() {
      const randomStartOffset = (Math.random()*9).toFixed(0);
      const startOfDay = moment().startOf('day').add(9, 'hr').add(randomStartOffset, 'hours')
      const startDate = startOfDay.clone().subtract(1, 'week').toISOString();
      const endDate = startOfDay.clone().add(1, 'month');
      return moment(faker.date.between(startDate, endDate)).startOf('hour')
    }
  })
}

Сериализаторы

      export const serializers = {
  user: ApplicationSerializer.extend({
    include(request) {
      const include = [];
      if (request.queryParams.includeEvents) include.push('events');
      return include;
    },
    serialize() {
      let json = Serializer.prototype.serialize.apply(this, arguments);
      return json
    }
  }),
  event: ApplicationSerializer.extend({
    serialize(object, request) {
      let json = Serializer.prototype.serialize.apply(this, arguments);
      if (!('end' in json))
      json.end = moment(json.start).add(1, 'hour')
      return json;
    },
  })
}

0 ответов

Другие вопросы по тегам