Ember.Object没有实现Ember.Copyable

时间:2017-06-24 00:55:30

标签: javascript ember.js

我有一个非常简单的实际情况:
添加新项目的路线。在相应的控制器中,我预先定义了我的新项目的模型模型:

item: Ember.Object.create({
                date: moment(),
                amountTotal: '',
                netto: '',
                //...more properties
}),

这需要是一个Ember-Object,而不是普通的js-Object,否则其他东西就会破坏。

当我尝试保护新创建的项目时:

actions: {

    addItem: function() {
        let expense = this.store.createRecord('expense', this.get('item'));
    },
    //....
}

我收到错误

  

断言失败:无法克隆未实现Ember.Copyable的Ember.Object

所以我的问题是:
如何可以创建一个实现Ember.Copyable的对象?
或者有什么方法可以解决这个问题吗?

是的,我已经阅读了两篇other questions。 第一个给出了我最初在商店创建记录的地方。这有其常见的缺点(已在列表中填充,..)。

我也尝试过所有我能想到的方法来解决这个问题

item: Ember.Copyable.create({...})
// or 
let newItem = Ember.copy(this.get('item'));
let expense = this.store.createRecord('expense', newItem);
// and many more

最后:
如果有一种方法可以模拟一个新项目(最好使用模型的定义)而不创建记录,这将是绝对最好的......

1 个答案:

答案 0 :(得分:0)

  1. 您可以尝试为所有模型属性指定默认值,然后您就不需要为createRecord方法提供参数。
  2. 如下所示,models / expense.js,您可以简单地说this.store.createRecord('expense')这将提供所有默认值。

    export default Model.extend({
      name: attr('string',{ defaultValue: 'Sample Name'}),
      date: attr('date',{
        defaultValue(){
          //You can write some code and the return the result.            
          //if you have included moment, you can use that.
          return Date();
        }
      }),
      amount: attr('number',{ defaultValue: 10}),
      totalAmount: Ember.computed('amount',function(){
        return this.get('amount')*10;
      })    
    });
    
    1. 使用JSON.stringify和JSON.parse,如下所示,

      this.store.createRecord('expense', JSON.parse(JSON.stringify(this.get('item'))))

    2. Created twiddle供参考。