gpt4 book ai didi

ember.js - 回滚父记录不会删除子记录

转载 作者:行者123 更新时间:2023-12-02 05:15:05 25 4
gpt4 key购买 nike

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

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

最佳答案

我的应用程序中有一个 rollbackAll() 方法,它使用 get 和 promises 进行深度优先遍历,然后在回滚父级之前将它们全部回滚。它看起来像这样:

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() 即可。 (如果你有多个级别,最深的 child 优先)。

关于ember.js - 回滚父记录不会删除子记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14691745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com