Запуск нескольких сериализаторов для встроенных моделей в 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;
},
})
}