当我点击' /'我的应用程序,我正在获取下面的堆栈跟踪
Error while loading route: TypeError: Cannot read property 'forEach' of undefined
at Function.Model.reopenClass.eachAttribute (http://localhost:3000/assets/ember-data.js?body=1:4870:32)
at JSONSerializer.extend.normalizeAttributes (http://localhost:3000/assets/ember-data.js?body=1:2906:16)
at JSONSerializer.extend.normalize (http://localhost:3000/assets/ember-data.js?body=1:2827:14)
at superWrapper (http://localhost:3000/assets/ember.js?body=1:1293:16)
at superFunction [as _super] (http://localhost:3000/assets/ember.js?body=1:7724:16)
at RESTSerializer.extend.normalize (http://localhost:3000/assets/ember-data.js?body=1:378:21)
at superWrapper [as normalize] (http://localhost:3000/assets/ember.js?body=1:1293:16)
at null.<anonymous> (http://localhost:3000/assets/ember-data.js?body=1:3179:35)
at Array.map (native)
at JSONSerializer.extend.extractArray (http://localhost:3000/assets/ember-data.js?body=1:3178:37)
相关守则在这里(在Coffeescript中):
Plnnr.ApplicationRoute = Ember.Route.extend(
model: ->
@store.find('stage')
)
Plnnr.Stage = DS.Model.extend(
tasks: DS.hasMany("task")
name: DS.attr("string")
description: DS.attr("string")
position: DS.attr("number")
)
Plnnr.ApplicationAdapter = DS.ActiveModelAdapter.extend(
namespace: 'v1'
)
使用Rails Serializer设置API并设置断点显示适配器正在成功检索数据。
我还在Ember-data.js中设置了一个断点,它位于失败开始的地方(在下面的代码中调用.normalize时):
var normalizedArray = map.call(payload[prop], function(hash) {
return typeSerializer.normalize(type, hash, prop);
}, this);
此时,键入= DS.Model和hash =序列化的API有效负载。
我是Ember的新手,并不熟悉如何解释文档。有谁知道可能出现什么问题,并对如何追踪问题有任何建议?
谢谢!
答案 0 :(得分:0)
事实证明问题是因为我在Ember中使用了Coffeescript。
我声明我的ember Task类是这样的:
class Plnnr.Task extends DS.Model
而不是
Plnnr.Task = DS.Model.extend
这两个不等同。当Stage正确使用第二个约定时,Task(属于Stage)错误地使用了第一个约定。当JSON同时返回Stage和Task对象时,序列化程序会抛出上面的跟踪,因为它无法正确处理Plnnr.Task解析