断言失败:您必须在传递给'push'Ember.js v-2.4的对象中包含帐户的"id"

Jac*_*ack 12 serializer ember.js ember-data

我是Ember的新手,我无法找到解决问题的方法.我已经在堆栈和其他论坛中阅读了这些问题,但它们似乎都不适合我.

我正在尝试创建一个简单的注册表单.我应该注意,对于后端我使用django.这是我的代码:

服务器响应:

[{"username":"user1","password":"123","email":"user1@example.com"},        
{"username":"user2","password":"456","email":"user2@example.com"}]
Run Code Online (Sandbox Code Playgroud)

Ember型号:

import DS from 'ember-data';

export default DS.Model.extend({
    username: DS.attr(),
    password: DS.attr(), 
    email: DS.attr()
});
Run Code Online (Sandbox Code Playgroud)

Ember适配器:从'ember-data'导入DS;

export default DS.RESTAdapter.extend({
    host: '/api',
    contentType: 'application/json',
    dataType: 'json',

    headers: {
        username: 'XXXX',
        password: 'XXXX'
   } 
});
Run Code Online (Sandbox Code Playgroud)

Ember Serializer:

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
    primaryKey: '_id'
});
Run Code Online (Sandbox Code Playgroud)

Ember Route:从'ember'导入Ember;

export default Ember.Route.extend({
    model() {
        return this.store.findAll('account');
    }
});
Run Code Online (Sandbox Code Playgroud)

灰烬控制器:

import Ember from 'ember';

export default Ember.Controller.extend({

    actions: {

    signup(){
        console.log('My username is: ', this.get('username'));
        console.log('My password is: ', this.get('password'));
        console.log('My email is: ', this.get('email'));

        var account = this.store.createRecord('account', {
                username: this.get('username'),
                password: this.get('password'),
                email: this.get('email')
        });

        account.save();

    }
    }
});
Run Code Online (Sandbox Code Playgroud)

通过这种实现,我得到了上述错误.任何帮助,将不胜感激.先感谢您.

Igo*_*gor 18

你的后端应该用id响应,即

{"id":123,"username":"user1","password":"123","email":"user1@example.com"}
Run Code Online (Sandbox Code Playgroud)

除非您希望特定字段充当id,否则您不需要使用序列化程序.因此,在上面的示例中,ember-data会期望您的后端返回

{**"_id":123**,"username":"user1","password":"123","email":"user1@example.com"}
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做:

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
    primaryKey: 'username'
});
Run Code Online (Sandbox Code Playgroud)

并使用您的用户名作为ID.