Использование собственного сериализатора в Ember с Хэлом Джсоном из Apigility
Итак, я нахожусь в процессе создания внешнего интерфейса нашего сайта, и, если коротко, местоположение нашего вызова API определяется быстротой. Я довольно новичок в Ember, так что мне пришлось собрать кучу информации о том, как лучше всего сделать эту работу. apigility настроен для предоставления службы REST, но вывод имеет следующий формат:
{
_links: {
self: {
href: "http://localhost:8888/article?page=1"
},
first: {
href: "http://localhost:8888/article"
},
last: {
href: "http://localhost:8888/article?page=1"
}
},
_embedded: {
article: [
{
nid: 1,
body_value: "Lorem Ipsum etc etc",
created: 1487176722,
_links: {
self: {
href: "http://localhost:8888/article/1"
}
}
}
]
},
page_count: 1,
page_size: 25,
total_items: 1,
page: 1
}
Начнем с того, что я просто пытаюсь проверить концепцию, вот мой сериализатор:
import DS from 'ember-data';
export default DS.RESTSerializer.extend({
primaryKey: 'nid',
normalizeResponse: function(store, primaryModelClass, payload, id, requestType) {
return {
data: payload._embedded.article,
};
}
});
Я также использую RESTAdapter для моего apadpter.
И наконец моя модель для article.js
import DS from 'ember-data';
export default DS.Model.extend({
body_value: DS.attr('string'),
nid: DS.attr('number')
});
Ошибка, которую это в настоящее время дает мне:
You must include an 'id' for undefined in an object passed to 'push'
Из-за этой ошибки я чувствую, что она правильно получает часть article из моего вызова API, но часть primaryKey, похоже, не действует.
Если я удаляю содержимое моего сериализатора, я получаю следующий список ошибок:
ember.debug.js:7062WARNING: Encountered "embedded" in payload, but no model was found for model name "embedded" (resolved model name using ember-drupal@serializer:application:.modelNameFromPayloadKey("embedded"))
ember.debug.js:7062WARNING: Encountered "page_count" in payload, but no model was found for model name "page-count" (resolved model name using ember-drupal@serializer:application:.modelNameFromPayloadKey("page_count"))
ember.debug.js:7062WARNING: Encountered "page_size" in payload, but no model was found for model name "page-size" (resolved model name using ember-drupal@serializer:application:.modelNameFromPayloadKey("page_size"))
ember.debug.js:7062WARNING: Encountered "total_items" in payload, but no model was found for model name "total-item" (resolved model name using ember-drupal@serializer:application:.modelNameFromPayloadKey("total_items"))
ember.debug.js:7062WARNING: Encountered "page" in payload, but no model was found for model name "page" (resolved model name using ember-drupal@serializer:application:.modelNameFromPayloadKey("page"))
Дайте мне знать, если есть какая-либо другая информация / код, который мне нужно включить.
РЕДАКТИРОВАТЬ
Примечание: разработчик API изменил его с 'nid' на 'id'
Иногда нужно просто начать с чистого листа, а?
Вот так выглядит мой сериализатор, и он работает как положено:
export default DS.RESTSerializer.extend({
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
payload = { article: payload._embedded[primaryModelClass.modelName] };
return this._super(store, primaryModelClass, payload, id, requestType);
},
});