我正在使用ember 1.3.1和ember-data 1.0.0-beta.5。在创建新模式时,我收到以下错误
断言失败:无法克隆未实现Ember.Copyable的Ember.Object
以下是我的型号代码
App.myModel = DS.Model.extend({ name:DS.attr('string'), 年龄:DS.attr('string') });
在我的创建路线模型功能
中返回Em.Object.create({});
最后保存我跟着
this.store.createRecord('property',this.get('model'));
尽管出现错误,但我的后端服务已成功调用,并保存了新模型。
请指导。
谢谢
答案 0 :(得分:10)
我遇到了同样的问题,我通过以下方式解决了这个问题:
在路线替换的模型功能中
return Em.Object.create({});
与
return this.store.createRecord('myModel');
并保存替换
this.store.createRecord('myModel', this.get('model'));
与
this.get('model').save();
答案 1 :(得分:6)
为了完整起见,在@acidleaf描述的场景中,这是该视频中来自ember核心团队的Yehuda Katz
提供的解决方案:
Off the Menu: Building a Client-Side With Ember and Rails - Yehuda Katz @ Rails Israel 2013
在您要返回要显示的资源列表的路径中(即资源StoriesRoute,PostsRoute等的复数版本),您将返回一个包含非新内容的筛选列表: / p>
model: function() {
this.store.find('myModel');
return this.store.filter('myModel',function(myModel){
return !myModel.get('isNew');
});
}
答案 2 :(得分:3)
我对Ember很新,并且仍然试图捕捉迁移到更新版本的Ember和Ember Data时所引起的所有问题,但是......
一方面,我认为你在最后一个代码块中有一个错误,它应该是:
this.store.createRecord('myModel', this.get('model'));
// myModel instead of property
但另一方面,我不认为这将是问题: - /
无论如何,尝试查看(和比较)Ember数据的变化:https://github.com/emberjs/data/blob/master/TRANSITION.md 以及http://discuss.emberjs.com/t/createrecord-using-this-get-model-throws-an-error/3968或类似的 希望它有所帮助!学家
答案 3 :(得分:2)
我在学习Ember时遇到了这个问题。接受的答案有效,但它首先在商店中创建一个新的空记录。这在我的应用程序中是不需要的,因为它在我的视图中显示空记录。
<强>路由器强>
App.ItemsNewRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.set('content', {});
}
});
<强>控制器强>
App.ItemsNewController = Ember.ObjectController.extend({
actions: {
save: function() {
this.store.createRecord('item', {
title: this.get('newTitle'),
category: this.get('newCategory')
}).save();
this.transitionToRoute('items');
}
}
});
<强>模板强>
<script type="text/x-handlebars" data-template-name="items">
<ul class="list-group">
{{#each}}
<li class="list-group-item">{{title}} - {{category}}</li>
{{/each}}
{{outlet}}
<li class="list-group-item">{{#link-to "items.new"}}Add{{/link-to}}</li>
</ul>
</script>
<script type="text/x-handlebars" data-template-name="items/new">
<li class="list-group-item">
{{input class="form-control" value=newTitle placeholder="Title"}}
{{input class="form-control" value=newCategory placeholder="Category"}}
<button class="btn btn-default" {{action "save"}}>Save</button>
</li>
</script>