Это сильно зависит от вашего внутреннего API, и если вы используете Ember Data или обычный fetch / ajax запрос.
Самый простой случай - использование Ember Dataвместе с JSON: API , который поддерживает включение связанных ресурсов :
import Route from '@ember/routing/route';
export default Route.extend({
model({ post_id }) {
return this.store.findRecord('post', post_id, { include: 'comments' });
}
});
Если вы используете обычный fetch
, вы можете использовать Promise.all()
для загрузкинесколько записей параллельно:
import Route from '@ember/routing/route';
export default Route.extend({
async model({ post_id }) {
let [post, comments] = await Promise.all([
fetch(`/posts/${post_id}`),
fetch(`/posts/${post_id}/comments`),
]);
return { post, comments };
}
});
Если вам не нравится синтаксис Promise.all()
с уничтожением массива, вы можете захотеть взглянуть на RSVP.hash()
.rsvp
по умолчанию связан с ember.
Если вы делаете это с Ember Data, но ваш API не поддерживает боковую загрузку, это немного сложнее, так как вам нужно использовать запрос для загрузки комментариев.Это зависит от конфигурации вашего адаптера, но я думаю, это будет выглядеть так:
import Route from '@ember/routing/route';
export default Route.extend({
async model({ post_id }) {
let [post, comments] = await Promise.all([
this.store.findRecord('post', post_id),
this.store.query('comment', {
filter: {
post: post_id
}
})
]);
return { post, comments };
}
});