emberjs无法克隆未实现Ember.Copyable的Ember.Object

时间:2014-01-24 23:46:28

标签: ember.js ember-data

我正在使用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'));

尽管出现错误,但我的后端服务已成功调用,并保存了新模型。

请指导。

谢谢

4 个答案:

答案 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,PostsRou​​te等的复数版本),您将返回一个包含非新内容的筛选列表: / 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>