Ember.js - Модель todo не найдена при использовании ember-cli-mirage для поддельной модели

Я изучаю ember.js с помощью этого руководства При использовании ember-cli-mirage для создания поддельной модели для подобных задач

import Mirage, {faker} from 'ember-cli-mirage';

export default Mirage.Factory.extend({
    title(i) { return 'Todo title ${i + 1}'; },
    complete: faker.list.random(true, false)
});

моя конфигурация миража выглядит следующим образом

export default function() {
    this.get('/todos', function(db, request) {
        return {
            data: db.todos.map(attrs => (
                {type: 'todos', id: attrs.id, attributes: attrs }
            ))
        };
    });
    this.post('/todos', function(db, request) {
        let attrs = JSON.parse(request.requestBody);
        let todo = db.todos.insert(attrs);
        return {
            data: {
                type: 'todos',
                id: todo.id,
                attributs: todo
            }
        };
    });
    this.patch('/todos/:id', function(db, request) {
        let attrs = JSON.parse(request.requestBody);
        let todo = db.todos.update(attrs.data.id, attrs.data.attributes);
        return {
            data: {
                type: "todos",
                id: todo.id,
                attributes: todo
            }
        };
    });
    this.del('/todos/:id');
}

Меня больше беспокоят модели. Имя модели - «todos», и Ember каким-то образом меняет его на «todo» при работе с отдельной записью.

Из моего маршрута todos я возвращаю модель следующим образом

маршруты / todos.js

  model() {
        return this.store.findAll('todos');
    }

И тогда я не понимаю приведенный выше код - в учебнике сказано, что он должен быть this.store.findAll(**'todo'**);, но это не возвращает никаких данных в консоль ember. Я изменил его на 'todos' и вижу некоторые результаты. (вывод в конце)

В routes / todos / index.js - Возвращаем modelFor ('todos')

  model(){
    return this.modelFor('todos');
  }

А в шаблоне - todos / index.hbs

<ul id="todo-list">
  {{#each model as |todo| }}
      {{todo-item todo=todo}}
  {{/each}}
</ul>

Я понимаю, что индекс получает эту модель из todos.hbs. {{Outlet}} todos.hbs выглядит так, как показано ниже.

<input type="text" id="new-todo" placeholder="What needs to be done?" />

{{#todo-list todos=model}}
  {{outlet}}
{{/todo-list}}

Когда я запускаю это приложение, я получаю следующую ошибку.

Вывод Ember Inspector

На выходе я получаю данные из запроса на получение по / -> это маршрут задач. Но я не получаю доступ к задачам в маршруте задач / индекса.

Спасибо за помощь. Все фрагменты кода взяты из руководства.


person RKV    schedule 10.11.2015    source источник


Ответы (1)


Отметьте следующее (то, что я заметил):

  1. Ваш файл модели называется todo.js? Это должно быть в единственном числе ...
  2. Ваш маршрут должен быть единичным findAll('todo')!
  3. В вашем маршруте публикации в конфигурации миража есть опечатка: "attributs: todo" должно быть атрибутами.
  4. Вы возвращаете данные в формате JSONAPI. Вы используете JSONAPIAdapter, а не RestAdapter для своего адаптера приложения?
person A.C. Wright    schedule 10.11.2015
comment
Проблема заключалась в файле todos.js во множественном числе, хотя насчет JSONAPI я не уверен. Я проверю - person RKV; 11.11.2015