我的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错误而出错。
答案 0 :(得分:4)
我找到了解决方案。 createRecord
获取type
和record
个参数,但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适配器将知道该怎么做。