在 Controller 中:
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]
范围时,将触发 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);
关于javascript - Ember Data deleteRecord() 后跟 rollback() - 如何使对象重新出现在列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24052488/