findRecord上的“str未定义”

时间:2017-07-04 00:53:26

标签: ember.js ember-data ember-model

我的模型和序列化程序有问题。我查看了文档,找不到解决方案。我的应用程序连接到django rest api。

Django回复:

{
    "id": 1,
    "url": "http://localhost:8000/users/1/",
    "username": "username",
    "email": "xxx@email.com",
    "is_staff": true
}

模特:

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

我已使用序列化程序修改了响应以包含“数据”:

export default DS.JSONAPISerializer.extend({
    primaryKey: 'id',
    normalizeFindRecordResponse(store, type, payload, id) {
        console.log('payload',payload)
        return {
            data: {
                'id': id,
                'url': payload.url,
                'username': payload.username,
                'email': payload.email,
            }
        } ; 
    }
});

路线:

export default Ember.Route.extend({
    model() {
        return this.store.findRecord('users', 1);
    }
});

该路线的另一个版本同样错误:

export default Ember.Route.extend({
    model() {
        this.store.findRecord('users', '1').then(function(user){
            console.log('user', user);
        }).catch(function(e){
            console.log('e', e);
        });
    }    
});

最后,Ember检查器具有模型,但所有值都未定义,控制台上的“str未定义”。

Image of ember inspector

1 个答案:

答案 0 :(得分:0)

1. normalizeFindRecordResponse未返回有效的JSONAPI格式, 以下是有效格式

{
  "data": {
    "type": "articles",
    "id": "1",
    "attributes": {
      // ... this article's attributes
    }        
  }
}

如您所见,您遗漏了typeattributes密钥。

2.您的模型文件名应为user.js单数 3。this.store.findRecord('users', 1) - 在这里你需要使用模型的单一形式this.store.findRecord('user', 1)
4.在你的另一次尝试中,你错过了模型钩子中的return语句。