Не могу использовать связанную модель в шаблоне (EmberJS)
Вот что у меня есть.
2 модели: "Примечание" и "Пользователь". Примечание имеет поле под названием "пользователь", которое делает репликацию "1 пользователь ко многим заметкам". Данные взяты из Миража.
Примечание модель:
export default DS.Model.extend({
subject: DS.attr(),
message: DS.attr(),
user: DS.belongsTo('user'),
created_at: DS.attr(),
updated_at: DS.attr(),
});
Модель пользователя:
export default DS.Model.extend({
username: DS.attr(),
email: DS.attr(),
notes: DS.hasMany('note'),
});
Код Миража:
let notes = [
{
id: 1,
type: 'note',
attributes: {
subject: 'Test 1',
message: 'tttttttttttttttttttttttt',
user_id: 1,
'created-at': '2017-03-10 15:04:22',
'updated-at': '2017-03-10 15:04:22',
}
},
{
id: 2,
type: 'note',
attributes: {
subject: 'Test 2',
message: 'klakljadlfkjhasdflij',
user_id: 1,
'created-at': '2017-02-10 15:04:22',
'updated-at': '2017-02-10 15:04:22',
}
}
];
let users = [
{
id: 1,
type: 'user',
attributes: {
username: 'user',
email: 'user@email.com',
}
}
];
this.get('/notes/:id', function (db, request) {
let note = notes.find((note) => parseInt(request.params.id) === note.id);
let result = {
data: note
};
if (request.queryParams.include === 'user') {
result.included = [users.find((user) => parseInt(note.attributes.user_id) === user.id)];
}
return result;
});
Пользовательская модель извлекается (как я вижу в EmberInspector).
При использовании есть пустой вывод {{model.user.username}}
внутри шаблона.
И есть пустая "пользовательская" модель, когда я использую {{log model.user}}
,
Я думаю, что проблема может быть связана с тем фактом, что модель "Примечание" получается немного раньше без модели "Пользователь", когда я создаю список заметок.
Большое спасибо за помощь!
1 ответ
Ваша проблема в том, что вы используете JSONAPISerializer
но ваш ответ не соответствует JSONAPI. JSONAPI будет ожидать этого:
{
data: {
id: 1,
type: 'note',
attributes: {
subject: 'Test 1',
message: 'tttttttttttttttttttttttt',
'created-at': '2017-03-10 15:04:22',
'updated-at': '2017-03-10 15:04:22',
},
relationships: {
user: {
data: {
type: 'user'
id: '1'
}
}
}
}
}
А затем загрузить user
с ним id
1
,
Но ваш ответ таков:
{
data: {
id: 1,
type: 'note',
attributes: {
subject: 'Test 1',
message: 'tttttttttttttttttttttttt',
user_id: 1,
'created-at': '2017-03-10 15:04:22',
'updated-at': '2017-03-10 15:04:22',
}
}
}
Так ember-data
считает, что эта заметка не имеет пользователя. Прочитайте JSONAPI, чтобы понять требуемый ответ.