В приложении, использующем стандартный Ember 2.0 DS.JSONAPISerializer, поведение по умолчанию для REST API, отвечающего на save()
, - это «возврат пустого объекта ({})». [1]Ручка корпуса JSON После сохранения() на модели
В моем случае мой REST API выполняет некоторые изменения в данных, в том числе присваивает идентификатор BigSerial Int64 ID из Postgres и обрабатывает ввод текста Markdown (намного быстрее, чем Ember). Это должно (должно быть) синхронно/блокировать.
Есть ли идиоматический подход к обработке ответа от save()
по умолчанию DS.JSONAPISerializer, чтобы возвращаемая модель JSON была сохранена в кеше Ember?
Из того, что я вижу, я должен быть переопределяющим normaliseSaveResponse
, чтобы достичь этого, приняв ответ с сервера. Это не сразу понятно, как я должен установить поля в «просто спас» модель с сервером при условии значений, однако:
// app/models/item.js - simplified
export default DS.Model.extend({
id: DS.attr("number"),
title: DS.attr(),
body: DS.attr(),
// Only populated in the server response
rendered: DS.attr(),
createdDate: DS.attr("date"),
normalizeSaveResponse: function(store, primaryType, payload, id, requestType) {
// What goes here to deserialize the response into the model?
this.id = payload.item[i].id,
this.title = payload.item[i].title,
this.body = payload.item[i].rendered,
}
});
Резюмируя:
- мне нужно заполнить поле ID в модели с порядковым ID с сервера в ответ на
save()
- мне также нужно заполнить
rendered
поле с Markdown - Дата поля, и т.д. с сервера проверяются метки времени
- Это работает при сохранении одного элемента и нескольких элементов?
Если есть лучший способ достичь этого - например, другой метод - я открыт для предложений. Желание иметь дополнительные проверки/преобразования на сервере, вернуть «исправленный» ответ, а затем заставить Ember сохранить его в своем собственном магазине => переход на /model/:id
.
вы пытаетесь просто вернуть модель с сервера ли? Он отлично работает для меня с RESTAdapter в 1.13.9 –
@GennadyDogaev Когда вы говорите «отлично работает», вы имеете в виду «он автоматически заполняет любые пустые поля (id, rendered и т. Д.) С ответом JSON сервера от' model.save() '' -? Если это так, это здорово - просто конфликты с моим пониманием документов. – elithrar
Да, это именно то, что я имею в виду –