2013-02-04 91 views
5

回滚父记录似乎不会删除可能已添加到其中的任何新子记录。不确定这是一个错误还是功能。回滚父记录不会删除子记录

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

我在我的应用程序中的rollbackAll()方法使用GET和承诺,做深度优先遍历,然后滑出他们都回来了回滚父面前。它看起来像这样:

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()。 (如果你有多个级别,最深的孩子首先)。