TypeError:无法读取属性' forEach'未定义的Ember-Data

时间:2014-05-23 04:50:14

标签: ember.js ember-data

当我点击' /'我的应用程序,我正在获取下面的堆栈跟踪

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的新手,并不熟悉如何解释文档。有谁知道可能出现什么问题,并对如何追踪问题有任何建议?

谢谢!

1 个答案:

答案 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解析