回滚父记录似乎不会删除可能已添加到其中的任何新子记录。不确定这是否是错误或功能。
App.Company = DS.Model.extend({
name: DS.attr('string'),
employees: DS.hasMany('App.Employee')
});
App.Employee = DS.Model.extend({
name: DS.attr('string'),
company: DS.belongsTo('App.Company')
})
var company = App.Company.find(1);
//Initially: company.get('employees.length') => 0
var employee = company.get('employees').createRecord();
//Now: company.get('employees.length') => 1
employee.get('transaction').rollback();
//Still: company.get('employees.length') =>1
//Also: employee.get('isDeleted') => true
company.get('transaction').rollback();
//Even now: company.get('employees.length') =>1
//How do I rollback such that company.get('employees.length') == 0
答案 0 :(得分:0)
我的应用程序中有一个rollbackAll()方法,它使用get和promises进行深度优先遍历,然后在回滚父级之前将它们全部回滚。它看起来像这样:
rollbackAll: function() {
// recursively rollback on all children and self
this.get('children').then(function (children) {
children.forEach(function(child) {
child.rollbackAll();
});
});
this.rollback();
}
我应该提到那个,因为我碰巧在我的应用程序中有递归关系(即一个对象树,每个对象都有自己的父对象)。
这里的模式是每个模型' class'可以获得自己的rollbackAll方法,它知道如何回滚自己的关联,然后它应该只是在每个方法上调用rollbackAll()。 (如果您有多个级别,请首先考虑最深的孩子)。