我尝试使用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从我的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}}
答案 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}},false
或null
)。
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。