"str is undefined" 在查找记录上

"str is undefined" on findRecord

我对模型和序列化程序有疑问。我查看了文档,但找不到解决方案。我的应用程序已连接到 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'),
});

我已经使用序列化程序修改了响应以包含 "data":

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 inspector 有了模型,但控制台上的所有值都未定义并且 "str is undefined"。

Image of ember inspector

1.normalizeFindRecordResponse 不是 return 有效的 JSONAPI 格式, 以下是有效格式,

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

如您所见,您缺少 typeattributes 键。

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