2013-02-04 125 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()。 (如果你有多個級別,最深的孩子首先)。