Не могу использовать связанную модель в шаблоне (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 с ним id1,

Но ваш ответ таков:

{
    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, чтобы понять требуемый ответ.

Другие вопросы по тегам