[英]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.