Ember:没有找到'user'的模型,并且在执行save promise时创建了Duplicate POST

J W*_*ezy 5 javascript console ember.js ember-data ember-cli

更新:

有人可以帮忙吗?本周好一半,我一直在追求这个没有好运的事情.我注意到客户端正在生成两个POST.我已经为适配器添加了代码.还有其他我应该看的吗?

我正在浏览下面提供的视频教程,当我单击"提交"按钮将数据保存到数据库时,无法解决两个错误.

  1. 找不到'用户'的型号
  2. 正在生成两个POST.这会导致Assertion Failed错误,我怀疑这是因为从服务器返回的ID与前端的当前ID不匹配.

我看到数据库有两个新记录.当我再次单击提交按钮时,应用程序会将我带回到todo-items页面,其中显示了两个记录.谁能告诉我我做错了什么?

当前版本:

  • 恩伯:3.2.2
  • Ember数据:3.2.0
  • jQuery:3.3.1
  • Ember Simple Auth:1.7.0

视频教程(错误发生在11:30标记处):https://www.youtube.com/watch?v = bZ1D_aYGJnU.注意:该视频的作者似乎已经将重复的POST问题在视频结尾处消失了,但我看不出如何.

灰烬错误消息

组件/表格/ TODO项表格/ component.js

import Component from '@ember/component';

export default Component.extend({
    actions:{
        save(){
            this.get('submit')();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

组件/表格/ TODO项表格/ template.hbs

<form {{action "save" on="submit"}}>
{{input placeholder="description" value=todoItem.description}}
  <br />
  {{#if todoItem.validations.isValid}}
    <button type="submit">Add</button>
  {{else}}
    <button type="submit" disabled>Add</button>
  {{/if}}
</form>
Run Code Online (Sandbox Code Playgroud)

模板/ S/TODO项/ add.hbs

{{forms/todo-item-form
  todoItem=model
  submit=(route-action "submitAction") 
}}
{{outlet}}
Run Code Online (Sandbox Code Playgroud)

型号/待办事项,item.js

import DS from 'ember-data';

import { validator, buildValidations } from 'ember-cp-validations';

const { attr, belongsTo } = DS;
const Validations = buildValidations({
  description: [
    validator('presence', true),
    validator('length', {
      min: 4
    })
  ]
});

export default DS.Model.extend(Validations, {
    description: attr('string'),
    owner: belongsTo('person')
});
Run Code Online (Sandbox Code Playgroud)

适配器/ application.js中

import DS from 'ember-data';
import ENV from 'todo-list-client/config/environment';

const {computed, inject :{service} } = Ember;

export default DS.JSONAPIAdapter.extend({
    session: service(),

    namespace: ENV.APP.namespace,
    host: ENV.APP.host,

    headers: computed('session.data.authenticated.token', function() {
        let token = this.get('session.data.authenticated.access_token');
        return { Authorization: `Bearer ${token}` };
      }),
})
Run Code Online (Sandbox Code Playgroud)

路线/ S/TODO项/ add.js

import Route from '@ember/routing/route';

export default Route.extend({
    model(){
        return this.store.createRecord('todo-item');
    },

    actions: {
        submitAction() {
            this.get('controller.model')
            .save()
            .then(() => {
              this.transitionTo('s.todo-items');
            });
        }
    },
});
Run Code Online (Sandbox Code Playgroud)

Loc*_*Guy 5

作者将该路线的Ember-Data-Route添加到大约15m5s add.js作为mixin.这在模型之后清理.

他在那时开始解释,在视频中的下一两分钟内添加它:

https://youtu.be/bZ1D_aYGJnU?t=15m5s

import Ember from 'ember';
import DataRoute from 'ember-data-route';

export default Ember.Route.extend(DataRoute, {
  model() {
    return this.store.createRecord('todo-item');
  },

  actions: {
    save() {
      this.get('controller.model')
        .save()
        .then(() => {
          this.transitionTo('s.todo-items');
        });
    }
  },

});
Run Code Online (Sandbox Code Playgroud)