我有一个非常简单的实际情况:
添加新项目的路线。在相应的控制器中,我预先定义了我的新项目的模型模型:
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
最后:
如果有一种方法可以模拟一个新项目(最好使用模型的定义)而不创建记录,这将是绝对最好的......
答案 0 :(得分:0)
如下所示,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;
})
});
使用JSON.stringify和JSON.parse,如下所示,
this.store.createRecord('expense', JSON.parse(JSON.stringify(this.get('item'))))
Created twiddle供参考。