Ember错误“Uncaught TypeError:在模型保存时无法读取未定义的属性'typeKey'

时间:2013-10-03 19:40:39

标签: ember.js

我的RESTAdapter配置:

App.ApplicationAdapter = DS.RESTAdapter.extend
  namespace: '/api'

我的模特:

module.exports = App.Cat = DS.Model.extend
  name: DS.attr 'string'
  description: DS.attr 'string'
  picture: DS.attr 'string'
  location: DS.attr 'string'
  profileStyle: DS.attr 'string'
  created: DS.attr 'date'

我的路线:

Cat = require '../../models/cat'

App.CatNewRoute = Em.Route.extend
  model: ->
    @store.createRecord(Cat, {
      created: new Date()
    })

我的控制器:

App.CatNewController = Em.ObjectController.extend
  actions:
    addCat: ->
      console.log 'saving...'
      @get('model').save().then ->
        console.log 'all done'

我已经通过Ember检查员验证了我的模型具有在保存时通过模板上的表单分配的所有属性(除了id为null之外 - 我认为这是正常的,默认情况下是Ember使用服务器分配给模型的ID。每当我保存模型时,我都会收到错误:

Uncaught TypeError: Cannot read property 'typeKey' of undefined 

此错误发生在ember数据源代码中:

if (container) {
  adapter = container.lookup('adapter:' + type.typeKey) || container.lookup('adapter:application');
} 

我正在使用Ember-data 1.0.0 beta 3-2和Ember 1.0.0-4。我尝试了几种不同版本的Ember数据,效果相同。

jsBin:http://jsbin.com/ixIqIjI/6/edit?html,js,console,output

中的近似值

此jsBin也因typeKey错误而出错。

3 个答案:

答案 0 :(得分:4)

我找到了解决方案。 createRecord获取typerecord个参数,但type不能是App.Cat之类的显式模型名称,它必须是Ember随后附加的字符串基于名称的正确模型。在这种情况下,创建记录的正确方法是this.store.createRecord('cat', {...} )

答案 1 :(得分:0)

我认为你的要求是未定义的。

Cat = require '../../models/cat'
Cat // the variable Cat is undefined

因此,此代码将失败

@store.createRecord(Cat /* Cat is undefined*/, {
  created: new Date()
})

您确定cat模型位于路径../../models/cat

某些构建工具(如ember-tools)需要使用module.exports公开该类,如果您正在使用它,则需要使用:

module.exports = Cat; 

在cat.js文件中。

我希望它有所帮助

答案 2 :(得分:0)

我更新了你的JSBin工作。 你必须传递模型的字符串版本,所以对于App.Cat,你会传递像“App.BigPost”这样的东西,你会传递“bigPost”,字符串将被解析为模型然后ember-data适配器将知道该怎么做。

工作版本 - http://jsbin.com/ixIqIjI/10/edit