внешняя маршрутизация - это не то же самое, что внутренняя маршрутизация.
Самый простой способ представить себе внешнюю маршрутизацию - это «вложенные представления», а не вложенные ресурсы.
Итак, что касается полученияданные (если у вас еще нет ваших данных), вам нужен файл маршрута по этому пути:
app / router / location / посещения.js (я думаю, вы также можете ember g route location/visits
и посмотреть, чтобывает)
Затем в вашем маршруте:
import Route from '@ember/routing';
export default class LocationVisitsRoute extends Route {
// this is the route lifecicle hook that actually gets the data
// more on that here: https://guides.emberjs.com/release/routing/
async model(params) {
// this assumes that your location route loads the location resource
// similar to how we're trying to load the visits resources is this route.
let locationId = this.modelFor('location').location.id;
// you could also get the location id from params,
// but I don't remember the exact path where the id would live.
console.log(params);
// this is kind of hacky, and I wouldn't really recommend it, as there may
// be concurrency issues. but this technique was taken from here:
// https://discuss.emberjs.com/t/current-way-to-handle-nested-resources/7477/7
this.store.adapterFor('visit').set('namespace', `/api/locations/${locationId}`);
let visitsForLocation = await this.store.findAll('visit');
return {
visits: visitsForLocation,
};
}
}
Затем в вашем шаблоне для посещений вы можете сделать
{{#each model.visits as |visit|}}
<h1>{{visit.name}}</h1>
{{/each}}
в качестве альтернативы, если вы используете { json:api }
, вы можете просто указать атрибут links
, и все должно «просто работать»: Как использовать Ember Data с вложенными ресурсами
Итак, в общем, если вы используете{ json:api }
, настройка полезной нагрузки, чтобы сообщить клиенту, где находятся ресурсы / отношения, действительно лучший способ.