在控制器中:
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进行恢复更改)
答案 0 :(得分:1)
这可能是因为记录已从路径的模型(又名可见列表)中删除,但不是来自商店(可见和非可见模型的缓存)。
尝试再次手动将其推送到route.model
。
route.get('model').pushObject(note);