Предисловие: в этом проекте много нововведений, таких как создание моего первого API, первый раз с использованием JSON API, первый раз с использованием Ember, первая публикация на SO и т. Д.
Я пытаюсь получить доступ к атрибуту hasMany
авторов в моем шаблоне, содержащем последние обновления. Что я получаю доступ к нему в шаблоне, однако, ничего не возвращается. Модели сохраняются корректно, но отношения не устанавливаются, они появляются, поскольку длина DS.PromiseManyArray
в latest.contentAuthors
равна 0
, пока обещание выполнено ({ _length: 0, isFulfilled: true, isRejected: false }
).
Я использую Ember 3.10 (с CLI). У меня есть полный контроль над моим бэкэндом (LAMP работает с ExpressionEngine 5), и я обслуживаю запросы API через специальный плагин, хотя я не уверен, что это имеет большое значение, так как кажется, что это во многом проблема внешнего интерфейса из того, что я могу различить.
Маршрут
import Route from '@ember/routing/route';
export default Route.extend({
model(){
let latest = this.store.peekAll('latest');
if (latest.length < 2){
latest = this.store.query('latest', { limit: 2, include: "people" });
}
return latest;
}
});
Базовая модель
import DS from 'ember-data';
const { Model } = DS;
export default Model.extend({
title: DS.attr()
});
Последняя модель
Редактировать: Удалено избыточное свойство, которого нет в исходном коде
import DS from 'ember-data';
import ExpressionEngineBase from './expression-engine-base';
export default ExpressionEngineBase.extend({
blurb: DS.attr(),
contentAuthors: DS.hasMany('person')
});
Модель лица
Редактировать: Удалено избыточное свойство, которого нет в исходном коде
import DS from 'ember-data';
import ExpressionEngineBase from './expression-engine-base';
export default ExpressionEngineBase.extend({
latest: DS.hasMany('latest')
});
Template
{{#each this.model as |latest|}}
<h2>{{latest.title}}</h2>
{{#each latest.contentAuthors as |author|}}
<div>{{author.title}}</div>
{{else}}
<div>Can't find author(s)</div>
{{/each}}
<p>{{latest.blurb}}</p>
{{/each}}
Данные отправлены с сервера
Редактировать: Проверено это с помощью валидатора JSON API , чтобы обнаружить, что оригинал не соответствует. Я обновил свой бэкэнд, но это не решило проблему. Это теперь соответствует в соответствии с этим валидатором.
{
"data": [{
"id": "3161",
"type": "latest",
"attributes": {
"title": "Amazing Video 1"
},
"links": {
"self": "https:\/\/cms.example.com\/api\/v1\/video\/3161"
},
"relationships": {
"people": {
"data": [{
"id": "1",
"type": "people"
}]
}
}
}, {
"id": "2573",
"type": "latest",
"attributes": {
"title": "Amazing Article 1"
},
"links": {
"self": "https:\/\/cms.example.com\/api\/v1\/white_papers_insights\/2573"
},
"relationships": {
"people": {
"data": [{
"id": "1",
"type": "people"
}, {
"id": "52",
"type": "people"
}]
}
}
}],
"links": {
"self": "https:\/\/cms.example.com\/api\/v1\/latest?include=people&limit=2"
},
"included": [{
"id": "1",
"type": "people",
"links": {
"self": "https:\/\/cms.example.com\/api\/v1\/people\/1",
"channel": "https:\/\/cms.example.com\/api\/v1\/people"
},
"attributes": {
"title": "Great Author"
}
}, {
"id": "52",
"type": "people",
"links": {
"self": "https:\/\/cms.example.com\/api\/v1\/people\/52",
"channel": "https:\/\/cms.example.com\/api\/v1\/people"
},
"attributes": {
"title": "Great Co-Author"
}
}]
}
Повторим, модель отношений сохраняется и отображается в Ember Inspector, но фактическая связь / отношение не устанавливается.
Обновление: Я попытался переименовать типы и параметры запроса безрезультатно, проверяя, не связано ли перегиба с пропущенным отношением.