0

我正在使用reactjs并正在使用miragejs来模拟后端。我有两个模型,用户和事件。每个用户hasMany事件和每个事件都是ownedBy一个用户。我正在使用工厂来模拟仅给事件一个开始时间的事件。由于开始时间是随机的,我无法在工厂中生成结束时间,所以我在事件序列化时这样做。如您所见,在序列化程序部分,我检查该end属性是否存在。如果没有,那么我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;
    },
  })
}
4

0 回答 0