Ember 2.15中rollbackAttributes()未修改isDeleted,如何实现记录撤销删除?
解决Ember 2.15中撤销未持久化删除的问题
我之前也踩过这个坑!Ember Data的rollbackAttributes()确实不会处理isDeleted这个状态——因为它本质是记录的状态标记,不是你在模型里定义的普通属性,这个方法只负责回滚模型上的属性变更,管不到记录的状态类标记。
针对你要撤销未持久化删除的需求,有两个靠谱的解决方案:
1. 手动重置isDeleted状态
如果只是想撤销删除标记,同时保留其他未保存的属性修改,直接把isDeleted设回false就行,简单直接:
// 标记记录为删除 myRecord.deleteRecord(); // 撤销删除 myRecord.set('isDeleted', false);
这个方法只适用于还没执行save()的删除操作,要是已经把删除请求发去服务器了,那就没用了哈。
2. 用rollback()彻底回滚所有变更
如果你想一次性撤销所有未保存的操作(包括删除标记和其他属性修改),可以用record.rollback()——这个方法会把记录完全恢复到最近一次持久化的状态,包括重置isDeleted:
// 标记删除+修改属性 myRecord.deleteRecord(); myRecord.set('title', '临时修改的标题'); // 一键回滚所有变更 myRecord.rollback();
小提醒
- 要是只需要取消删除,选第一种方法;要全盘回滚所有未保存变更,选第二种;
- 这俩方法都只对未保存的删除有效,要是已经执行
save()提交了删除请求,只能重新从服务器拉取数据或者重建记录了。
内容的提问来源于stack exchange,提问作者mlehmeher
相关产品推荐
相关产品推荐

