我正在使用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;
},
})
}