ember data разные модели для одной и той же конечной точки - PullRequest
0 голосов
/ 07 января 2019

У меня есть API, который не возвращает данные JSON в формате, ожидаемом Ember-Data. Особенно при получении списка ресурсов против одного ресурса.

Например, GET /api/widgets/{id}

Должен возвращать модель одного виджета, которая может выглядеть следующим образом:

//app/models/widget.js

import DS from 'ember-data';

export default DS.Model.extend({
   name: DS.attr('string'),
   weight: DS.attr('number'),
   color: DS.attr('string')
});

Принимая во внимание, что получение полного списка виджетов через GET /api/widgets/ возвращает модель, которая должна выглядеть следующим образом:

// app/models/widgetlist.js

import DS from 'ember-data';

 export default DS.Model.extend({
   total: 22,
   widgets: DS.hasMany('widget')
});

думаю так должна выглядеть моя модель списка виджетов. По сути, это общее количество виджетов в системе и текущий набор виджетов с разбивкой по страницам)

Мне очень трудно понять, какая комбинация моделей, нестандартного адаптера и / или нестандартного сериализатора мне нужна, чтобы заставить это работать.

EDIT:

// Server responses examples

// GET api/widgets/77

{  
  "id":77,
  "name":"Acoustic Twangdoodle",
  "weight":3,
  "color":"purple"
}

// GET api/widgets/

{
  "total":22,
  "widgets":[
  {
     "id":77,
     "name":"Acoustic Twangdoodle",
     "weight":3,
     "color":"purple"
  },
  {
     "id":88,
     "name":"Electric Twangdoodle",
     "weight":12,
     "color":"salmon"
  }
  ]
}

1 Ответ

0 голосов
/ 07 января 2019

Это только одна модель!

Теперь я не понимаю, как работает ваша нумерация страниц. В зависимости от этого, возможно, вам не следует использовать findAll, а вместо этого использовать query для загрузки разбитого на страницы набора.

total является не частью модели, а метаданными . Используйте пользовательский JSONSerializer, и пусть extractMeta вернет это.

В зависимости от того, как работает ваша нумерация страниц, вы хотите сделать что-то вроде store.query('widget', { page: 3 }). Если вы говорите больше о том, как получить доступ к странице 2 или около того, вам будет легче объяснить это.

...