【发布时间】:2020-03-04 03:14:17
【问题描述】:
我正在使用 ag-grid/ag-grid-angular 来提供由数据库支持的可编辑数据网格。当用户编辑单元格时,我希望能够将更新发布到后端服务,如果请求成功更新网格,如果没有撤消用户的更改并显示错误。
我从几个不同的角度解决了这个问题,但还没有找到满足我所有要求的解决方案,而且我也很好奇实现这种功能的最佳实践是什么。
我的第一个想法是利用 cellValueChanged 事件。通过这种方法,我可以查看旧值和新值,然后调用我的服务来更新数据库。如果请求成功,那么一切都很好并且按预期工作。但是,如果请求由于某种原因失败,那么我需要能够撤消用户的更改。由于我可以访问旧值,因此我可以轻松地执行event.node.setDataValue(event.column, event.oldValue) 之类的操作来恢复用户的更改。但是,由于我再次更新网格,这实际上会再次触发 cellValueChanged 事件。我无法知道这是撤消用户更改的结果,因此我不必要地再次调用我的服务来更新数据,即使原始请求从未成功更新数据。
我还尝试使用自定义单元格编辑器在用户完成单元格编辑和网格实际更新之间进行切换。但是,似乎没有办法在这些类中的任何一个中集成异步方法,以便能够等待来自服务器的响应来决定是否实际应用用户的更改。例如。
isCancelBeforeStart(): boolean {
this.service.updateData(event.data).subscribe(() => {
return false;
}, error => {
return true;
});
}
不起作用,因为此方法是同步的,我需要能够等待服务的响应,然后再决定是否取消编辑。
有什么我遗漏或没有考虑到的吗?或者另一种方法来解决这个问题以获得我想要的功能?我意识到使用专用的编辑/保存按钮可以更轻松地处理此问题,但理想情况下,我正在寻找一个交互式网格,它可以在用户进行更改时将更改保存到后端,并在出现问题时提供反馈。
非常感谢任何帮助/反馈!
【问题讨论】: