Ошибка возврата обещания от Ember Data

Я работаю над своим первым приложением Ember и заставил его отображать то, что я хотел, с маршрутом, возвращающим статический объект JSON из model():

element: {
  name: "First Element",
  divisions: [{
    name: "First Division",
    sets: [{name: "Set 1"},{name: "Set 2"},{name: "Set 3"}]
  }, {
    name: "Second Division",
    sets: [{name: "Set 1"},{name: "Set 2"},{name: "Set 3"}]
  }]
}

Сейчас я пытаюсь провести рефакторинг для использования Ember Data + Mirage и ужасно провожу время.

Вот мой index.js маршрут

export default Ember.Route.extend({
    model() {
        return this.store.find('element', 1);
    },

Если я настрою свой Mirage config.js следующим образом:

  this.get('/elements', function() {
    return {
      elements: [
          {
            id: 1,
            name: 'First Element',
            divisions: [1, 2]
          }
      ]
    }
  });

то я получаю эту ошибку:

Your Ember app tried to GET '/elements/1', but there was no route defined to handle this request.

Если я настрою свой Mirage config.js следующим образом:

  this.get('/elements/1', function() {
    return {
       id: 1,
       name: 'First Element',
       divisions: [1, 2]
    }
  });

то я получаю эту ошибку:

22:46:40.883 "Error while processing route: index" "Assertion Failed: normalizeResponse must return a valid JSON API document:
    * One or more of the following keys must be present: "data", "errors", "meta"." "EmberError@http://localhost:4200/assets/vendor.js:25582:15

ИЗМЕНИТЬ:

Так что это не решение проблемы, как указано, но это помогло мне пройти через это. Я отказался от Pretender и снова начал создавать реальный сервер Rails в соответствии с этим превосходным руководством: http://emberigniter.com/modern-bridge-ember-and-rails-5-with-json-api/

Я смог сделать все, что хотел, таким образом, и если я когда-нибудь захочу сделать это приложение для производства, я намного ближе.


person ed94133    schedule 27.08.2015    source источник
comment
Ваш ответ API кажется недействительным для ember-data. Можете ли вы обновить свой пост тем, что отправляет ваш сервер? Ember-data ожидает, что данные будут отформатированы, как описано здесь: http://guides.emberjs.com/v2.0.0/models/connecting-to-an-http-server/   -  person dynamic_cast    schedule 27.08.2015
comment
Можешь показать свой роутер? Вы, вероятно, пропустили маршрут   -  person QuantumLicht    schedule 27.08.2015
comment
Что здесь происходит, так это то, что у меня есть один элемент (прямо сейчас), который содержит множество разделов, каждый из которых содержит множество наборов. Когда у меня была эта работа со статическим объектом JSON, я использовал {{#each в моем шаблоне .hbs, чтобы перечислить каждое подразделение, а внутри этого подразделения - каждый набор. Итак, модель для моего шаблона — это элемент.   -  person ed94133    schedule 27.08.2015
comment
Вы используете специальный адаптер или что-то в этом роде? Также попробуйте удалить divisions: [1, 2] из config.js и посмотрите, устранит ли это ошибку.   -  person Daniel Kmak    schedule 28.08.2015
comment
Итак, если вы посмотрите здесь. Атрибут верхнего уровня в вашем ответе Mirage должен быть одним из следующих: данные, ошибки или метаданные. Первый шаг — обернуть атрибут вашего элемента(ов) внутри атрибута данных. Это не решило проблему для меня, но это логичный первый шаг.   -  person Derek Dowling    schedule 03.09.2015


Ответы (1)


Таким образом, проблема в том, что вы на самом деле не придерживаетесь спецификации JSON API. Вы можете решить эту проблему, прочитав страницу Mirage на как соответствовать.

По сути, вам нужно либо вернуть объект на верхнем уровне вашего ответа JSON в случае вызова GET /foo/1. Вам также нужно будет изменить свой атрибут «элементы» на «данные» для GET /foo, и это должно помочь. Прямо сейчас нет простого, многократно используемого способа сделать этот Mirage из коробки. Лучше всего прямо сейчас для обеих проблем использовать решение, представленное в этом проблема.

person Derek Dowling    schedule 03.09.2015