2013-02-04 14 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(); 
} 

मुझे लगता है कि ऐसा इसलिए है क्योंकि मैं अपने आवेदन में पुनरावर्ती संबंधों (यानी वस्तुओं की एक पेड़ है, जिनमें से प्रत्येक का अपना माता पिता हो सकता है) के लिए होता है उल्लेख करना चाहिए।

यहां पैटर्न यह है कि प्रत्येक मॉडल 'वर्ग' को अपना रोलबैक मिल सकता है, सभी विधि जहां यह जानता है कि अपने स्वयं के संगठनों को कैसे रोल करना है, और फिर यह प्रत्येक पर रोलबैक सभी() को कॉल करने का मामला होना चाहिए। (यदि आपके पास कई स्तर हैं तो सबसे गहरा बच्चा)।

संबंधित मुद्दे