Ember数据删除Record()后跟rollback() - 如何使对象出现在列表中?

时间:2014-06-05 05:45:26

标签: javascript ember.js ember-data handlebars.js

在控制器中:

    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进行恢复更改)

1 个答案:

答案 0 :(得分:1)

这可能是因为记录已从路径的模型(又名可见列表)中删除,但不是来自商店(可见和非可见模型的缓存)。

尝试再次手动将其推送到route.model

route.get('model').pushObject(note);