1

このチュートリアルで ember.js を学習しています ember-cli-mirage を使用して todo の偽モデルを作成すると、このようになります

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>

index は 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 インスペクターの出力

出力では、/ の get リクエストからデータを取得します --> これは todos ルートですが、todos/index ルートで todos にアクセスできません。

助けてくれてありがとう。すべてのコード スニペットはチュートリアルからのものです。

4

1 に答える 1