3

我的 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 检查器验证了我的模型具有在保存时通过模板上的表单分配的所有属性(除了为 null 的 id - 我认为这是正常的,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 错误。

4

3 回答 3

4

我找到了解决方案。createRecord接受typerecord参数,但type不能是明确的模型名称,例如App.Cat,它必须是一个字符串,Ember 然后根据名称附加到正确的模型。在这种情况下,创建记录的正确方法是this.store.createRecord('cat', {...} )

于 2013-10-04T20:48:09.123 回答
0

我认为您的要求返回未定义。

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

因此,此代码将失败

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

你确定猫模型在路径中../../models/cat吗?

一些构建工具,如ember-tools,需要你暴露类 using module.exports,如果你正在使用它,你需要使用:

module.exports = Cat; 

在你的 cat.js 文件中。

我希望它有帮助

于 2013-10-03T22:47:24.073 回答
0

我更新了你的 JSBin 来工作。您必须传递模型的字符串版本,因此对于 App.Cat,您将传递“cat”来传递 App.BigPost 之类的内容,您将传递“bigPost”字符串将被解析为模型,然后 ember-data 适配器将知道要做什么。

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

于 2013-10-31T01:32:51.073 回答