Ember - 无法读取未定义的属性'replace'

Old*_*org 1 api rest laravel ember.js ember-data

我的应用程序

我试图使用Laravel作为RESTfull API服务器和Ember作为我的fontend框架构建一个相当简单的应用程序

我的后端服务器依然存在 http://api.example.com/1.0/

我的前端继续存在 http://www.example.com/

我刚开始这个项目,所以我只有几个小时的开发时间,所以可能会有一些配置问题,我在这里失踪,但无论如何.

我试图从我的服务器获取产品列表,并使用ember-data在我的ember应用程序中显示它们

我正在运行ember 2.0.2和ember-data 2.0.0

我在chrome中遇到以下错误.

错误

处理路径时出错:product无法读取未定义的属性' replace'TypeError:无法在Object 处读取Object.func(http:// localhost:4200/assets/vendor.js:45832:15)中未定义的属性'replace' .在object.func处的decamelize(http:// localhost:4200/assets/vendor.js:45874:29)的Cache.get(http:// localhost:4200/assets/vendor.js:23421:36)(http: //localhost:4200/assets/vendor.js:45789:12)在Object.dasherize的对象.Cache.get(http:// localhost:4200/assets/vendor.js:23421:36)处(http:// localhost:4200/assets/vendor.js:45878:35)在ember $ data $ lib $ system $ normalize $ model $ name $$ normalizeModelName(http:// localhost:4200/assets/vendor.js:66295:27)在ember $ data $ lib $ serializers $ json $ serializer $$ default.extend.modelNameFromPayloadKey(http:// localhost:4200/assets/vendor. js:75184:67)在Array.map(本机)的ember $ data $ lib $ serializers $ json $ serializer $$ default.extend._normalizeResourceHelper(http:// localhost:4200/assets/vendor.js:75064:30) )

在ember中,我生成了一个产品资源,给出了以下文件.

// app/routes/product.js

import Ember from 'ember';
export default Ember.Route.extend({
  model() {
    return this.store.findAll('product');
  }
});
Run Code Online (Sandbox Code Playgroud)
// app/model/product.js

import DS from 'ember-data';
export default DS.Model.extend({
  name: DS.attr(),
  price: DS.attr()
});
Run Code Online (Sandbox Code Playgroud)

JSON响应

Json从我的api回来了 http://api.example.com/1.0/products

{
  "data": [
    {
      "id": "1",
      "name": "dolores",
      "price": "59015",
      "created_at": "2015-09-06 16:18:13",
      "updated_at": "2015-09-06 16:18:13"
    },
    {
      "id": "2",
      "name": "debitis",
      "price": "57449",
      "created_at": "2015-04-07 14:45:16",
      "updated_at": "2015-04-07 14:45:16"
    },
    ...
  ]
}
Run Code Online (Sandbox Code Playgroud)

art*_*ych 6

这是适配器/序列化器错误,但它不具有描述性.JSONAPIAdapter(默认适配器)的Payload错误

您应该将有效负载修改为:

{
  "data": [
  {
    "id": "1",
    "type": "products",
    "attributes": {
      "name": "dolores",
      "price": "59015",
      "created-at": "2015-09-06 16:18:13",
      "updated-at": "2015-09-06 16:18:13"
    }
  }, {
    "id": "2",
    "type": "products",
    "attributes": {
      "name": "debitis",
      "price": "57449",
      "created-at": "2015-04-07 14:45:16",
      "updated-at": "2015-04-07 14:45:16"
    }
  }]
}    
Run Code Online (Sandbox Code Playgroud)

或者使用具有此类有效负载的RESTAdapter/Serializer:

 {
  "products": [{
    "id": "1",
    "name": "dolores",
    "price": "59015",
    "created_at": "2015-09-06 16:18:13",
    "updated_at": "2015-09-06 16:18:13"
  }, {
    "id": "2",
    "name": "debitis",
    "price": "57449",
    "created_at": "2015-04-07 14:45:16",
    "updated_at": "2015-04-07 14:45:16"
  }]
} 
Run Code Online (Sandbox Code Playgroud)

如果无法更改响应有效负载,则必须自定义Adapter/Serializer对.检查SO上的相关问题.

链接详情: