2013-02-04 29 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()メソッドを持って、その後、親をロールバックする前に戻ってそれらをすべてロールバックします。それは次のようになります。

rollbackAll: function() { 
    // recursively rollback on all children and self 
    this.get('children').then(function (children) { 
    children.forEach(function(child) { 
     child.rollbackAll(); 
    }); 
    }); 
    this.rollback(); 
} 

私は(自身の親を持つことができますそれぞれのオブジェクトのすなわち木、)私のアプリケーションでの再帰的な関係を持って起こるので、それはだということを言及する必要があります。

ここでのパターンは、各モデル 'クラス'が独自の関連付けをロールバックする方法を知っている独自のrollbackAllメソッドを取得できることです。次に、それぞれのrollbackAll()を呼び出す必要があります。 (もしあなたが複数のレベルを持っているなら、まず深い子供)。

関連する問題