灰烬 - 无法阅读财产'替换'未定义的

时间:2015-09-23 09:58:19

标签: api rest laravel ember.js ember-data

我的申请

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

我的后端服务器位于http://www.example.com/

我的前端生活在// app/routes/product.js import Ember from 'ember'; export default Ember.Route.extend({ model() { return this.store.findAll('product'); } });

我刚开始这个项目,所以我只有几个小时的时间进入开发阶段,因此可能会出现一些我在这里缺少的配置问题,但无论如何。

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

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

我在chrome中遇到以下错误。

错误

  

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

文件

在ember中,我生成了一个产品资源,提供了以下文件。

// app/model/product.js

import DS from 'ember-data';
export default DS.Model.extend({
  name: DS.attr(),
  price: DS.attr()
});
http://api.example.com/1.0/products

JSON响应

Json从我的api { "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" }, ... ] } 返回

{{1}}

2 个答案:

答案 0 :(得分:6)

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

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

{
  "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"
    }
  }]
}    

或使用具有此类有效负载的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"
  }]
} 

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

详情链接:

答案 1 :(得分:0)

同样的问题发生在我身上。

版本详细信息:

DEBUG: -------------------------------
ember.debug.js:DEBUG: Ember      : 1.11.0
ember.debug.js:DEBUG: Ember Data : 1.0.0-beta.14.1
ember.debug.js:DEBUG: jQuery     : 1.11.1
DEBUG: -------------------------------

问题原因:

似乎使用内联if帮助 向Handlebars元素添加属性会导致问题(您在条件中使用的属性是true,{{ 1}},falsenull)。

MY-component.hbs

undefined

my-component.coffee

<button class="btn btn-solve-my-problems" {{action 'solveIt}} {{if isNotSolvable 'disabled'}}>
  Solve my problems!
</button>

解决方案:

我只是将isNotSolveble: (-> if @get('somethingMeaningful') then true else null ).property('somethingMeaningful') 的值归因于if属性(isNotSolvable文件中没有任何更改),而不是使用内联disabled帮助器。 / p>

MY-component.hbs

my-component.coffee

PS:从方法返回的<button class="btn btn-solve-my-problems" {{action 'solveIt}} disabled="{{isNotSolvable}}"> Solve my problems! </button> null属性的操作有关。它与此线程中报告的问题无关。它只反映了我的情景以及我是如何解决这个问题的。更多详情here