【问题标题】:Assertion Failed: You must include an 'id' for account in an object passed to 'push' Ember.js v-2.4断言失败:您必须在传递给“推送”Ember.js v-2.4 的对象中包含帐户的“id”
【发布时间】:2016-03-22 13:56:26
【问题描述】:

我是 Ember 新手,在任何地方都找不到解决问题的方法。我已经在堆栈和其他 ember 论坛中阅读了这里的问题,但似乎没有一个对我有用。

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

服务器响应:

[{"username":"user1","password":"123","email":"user1@example.com"},        
{"username":"user2","password":"456","email":"user2@example.com"}]

Ember 模型:

import DS from 'ember-data';

export default DS.Model.extend({
    username: DS.attr(),
    password: DS.attr(), 
    email: DS.attr()
});

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

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

    headers: {
        username: 'XXXX',
        password: 'XXXX'
   } 
});

Ember 序列化器:

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
    primaryKey: '_id'
});

灰烬路线: 从 'ember' 导入 Ember;

export default Ember.Route.extend({
    model() {
        return this.store.findAll('account');
    }
});

Ember 控制器:

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();

    }
    }
});

通过这个实现,我得到了上述错误。任何帮助,将不胜感激。提前谢谢你。

【问题讨论】:

    标签: ember.js ember-data serialization


    【解决方案1】:

    您的后端应该使用 id 响应,即

    {"id":123,"username":"user1","password":"123","email":"user1@example.com"}
    

    您实际上并不需要使用序列化程序,除非您希望特定字段充当 id。所以在上面的例子中,ember-data 会期望你的后端返回

    {**"_id":123**,"username":"user1","password":"123","email":"user1@example.com"}
    

    或者你可以这样做:

    import DS from 'ember-data';
    
    export default DS.JSONSerializer.extend({
        primaryKey: 'username'
    });
    

    并使用您的用户名作为 id。

    【讨论】:

    • 非常感谢您的回答 Igor,我只是无法弄清楚服务器使用什么作为 id。
    【解决方案2】:

    我修正了我的错误。问题是后端使用用户名作为 id,所以 ember 无法识别它。

    Ember Serializer 的固定代码是:

    import DS from 'ember-data';
    
    export default DS.JSONSerializer.extend({
         primaryKey: 'username'
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 2014-01-18
      • 1970-01-01
      • 2014-10-21
      • 2016-07-19
      • 2016-12-30
      • 2018-01-30
      • 2019-03-23
      相关资源
      最近更新 更多