Ember Data deleteRecord()后跟rollback() - 如何让对象重新出现在列表中?

bgu*_*uiz 6 javascript handlebars.js ember.js ember-data

在控制器中:

    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
                }
            );
        },
    }
Run Code Online (Sandbox Code Playgroud)

在模板中:

{{#each note in model.notes}}
<li>
    <span>{{note.text}}</span>
    <span {{action 'selectDelete' note}}>[Delete]</span>
</li>
{{else}}
No Notes
{{/each}}
Run Code Online (Sandbox Code Playgroud)

现在,当我单击[Delete]跨度时,selectDelete将触发操作,并显示以下输出:

Delete error before true true
Delete error after false false
Run Code Online (Sandbox Code Playgroud)

...这意味着回滚成功,并且记录确实未被删除.

但是,在调用deleteRecord()更新DOM以删除表示已删除记录的部分时,调用rollback()似乎将更改还原到内存中的记录,但无法还原DOM中的更改.

如何确保rollback()触发此更改?

或者,有没有办法改变默认行为,这样deleteRecord()就不会触发DOM中的更改,而是保持不变,推迟更改,直到success调用回调为止?(这样就不需要对DOM进行恢复更改)

Lou*_*kad 1

这可能是因为该记录已从路线的模型(也称为可见列表)中删除,但没有从存储中删除(可见和不可见模型的缓存。)

尝试再次将其推至route.model手动。

route.get('model').pushObject(note);
Run Code Online (Sandbox Code Playgroud)