[英]Ember Data deleteRecord() followed by rollback() - how to make object reappear in list?
在控制器中:
actions: {
selectDelete: function(note) {
console.log('selectDelete', note);
note.deleteRecord();
note.save().then(
function success() {
console.log('Deleted successfully');
}, function failure() {
console.log('Delete error before',
this.get('isDeleted'), this.get('isDirty'); //true, true
// note.transitionTo('loaded.saved'); //also has same effect
note.rollback();
console.log('Delete error after',
this.get('isDeleted'), this.get('isDirty'); //false, false
}
);
},
}
在模板中:
{{#each note in model.notes}}
<li>
<span>{{note.text}}</span>
<span {{action 'selectDelete' note}}>[Delete]</span>
</li>
{{else}}
No Notes
{{/each}}
现在,当我单击[Delete]
span时,将触发selectDelete
操作,并输出以下内容:
Delete error before true true
Delete error after false false
...这意味着回滚成功,并且记录确实未被删除。
但是,当调用deleteRecord()
更新DOM以删除表示已删除记录的部分时,调用rollback()
会将更改还原到内存中的记录,但无法还原DOM中的更改。
如何确保rollback()
触发此更改?
或者,有没有办法改变默认行为,以便deleteRecord()
不会触发DOM中的更改,而是保持不变,推迟更改,直到调用success
回调? (这样就不需要对DOM进行恢复更改)
这可能是因为记录已从路线的模型(也称为可见列表)中删除,但不是从商店(可见和不可见模型的缓存 )中删除。
尝试再次手动将其推送到route.model
。
route.get('model').pushObject(note);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.