【问题标题】:Ember Data findAll() causing "TypeError: Cannot read property 'type' of undefined"Ember Data findAll() 导致“TypeError:无法读取未定义的属性‘类型’”
【发布时间】:2017-02-28 21:24:40
【问题描述】:

将我的第一个模型连接到我的后端,并在调用 Ember Data 的 findAll() 时收到以下错误

TypeError: Cannot read property 'type' of undefined

路线,

import Ember from 'ember';

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

模型,

import DS from 'ember-data';

export default DS.Model.extend({
    name: DS.attr()
});

我可以看到 Ember 正在访问我的本地服务器并从正确的 url 返回格式正确的 JSON,

{  
    "restaurants": {  
        "id":1,
        "name":"Restaurant Name"
    }
}

我看到过类似的问题,但通常与格式不正确的 JSON 有关。

【问题讨论】:

  • JSON 格式正确,但序列化程序可能需要一个餐厅数组:{"restaurants: [{}]} on findAll
  • 我试过了,还是不行。文档还说你可以有一个单一的对象,emberjs.com/api/data/classes/…
  • 默认情况下,您使用 JSONAPIAdapter 和序列化程序。如果你想要这个 Json,你应该手动选择使用正确的适配器和序列化器
  • 我正在尝试将我的 JSON 格式化为 Ember 默认的预期格式。你说我不是?你能解释一下勒克斯

标签: ember.js ember-data


【解决方案1】:

Ember 数据使用的默认数据格式是 JSON API,因此您的数据应如下所示,

{
  "data": {
    "id": "1",
    "type": "restaurants,
    "attributes": {
      "name": "Name"
    }
  }
}

在不改变后端生成数据格式的情况下使 Ember 数据满足您的需求。您可以添加自己的适配器,用于将您的 Ember 数据请求传输到正确的请求。

在下面的链接中阅读有关适配器的更多信息,

https://guides.emberjs.com/v2.6.0/models/customizing-adapters/

【讨论】:

  • 你是对的。我不知何故找到了关于 ember 在这里期待什么格式的错误文档,emberjs.com/api/data/classes/DS.RESTAdapter.html。我想这是一个可选的适配器。我很好奇他们为什么支持这个适配器。
【解决方案2】:

您的 JSON 文件的格式类似于 REST API 响应,但默认情况下 Ember 使用 JSONAPIAdapter。

首先修复 JSON,它应该返回一个数组:

[{  
  "id":1,
  "name":"Restaurant Name"
}]

然后更换适配器并配置序列化器:

// in app/adapters/application.js

import Ember from 'ember';
import DS from 'ember-data';

export default DS.RESTAdapter.extend({
})


// in app/serializers/application.js

import Ember from 'ember';
import DS from 'ember-data';

export default DS.JSONSerializer.extend({
})

阅读更多:

Customizing adapters

JSONAPIAdapter

RESTAdapter

【讨论】:

  • 考虑为 application.js 扩展 DS.RESTSerializer
猜你喜欢
  • 1970-01-01
  • 2016-09-07
  • 2016-04-20
  • 2020-01-23
  • 2020-11-25
  • 2021-07-17
  • 2022-12-24
  • 2021-11-20
  • 1970-01-01
相关资源
最近更新 更多