2013-02-04 13 views
5

Wycofanie rekordu nadrzędnego nie powoduje usunięcia żadnych nowych rekordów podrzędnych, które mogły zostać do niego dodane. Nie jestem pewien, czy to błąd czy funkcja.Wycofywanie rekordu nadrzędnego nie usuwa rekordów podrzędnych.

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 

Odpowiedz

0

Mam metodę w mojej aplikacji rollbackAll(), który robi głębokości pierwszego przechodzenie za pomocą GET i obietnice, a potem rzuca je wszystkie z powrotem przed wycofaniem rodzica. Wygląda to tak:

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

należy wspomnieć, że to dlatego, że zdarza mi się mieć rekurencyjnych relacje w mojej aplikacji (tj drzewo obiektów, z których każdy może mieć własną rodzica).

Wzór jest taki, że każdy model "klasa" może uzyskać własną metodę rollbackAll, w której wie, jak przywrócić własne asocjacje, a następnie powinna po prostu wywoływać funkcję rollbackAll() na każdym z nich. (Najgłębsze dziecko pierwsze, jeśli masz wiele poziomów).

Powiązane problemy