获取"错误:断言失败:在被破坏的对象上调用set"尝试回滚删除时

时间:2014-08-21 01:18:11

标签: ember.js ember-data

我正在研究当从服务器返回错误时如何在ember中显示正确的删除错误消息。我看了看这个主题并遵循了它的建议: Ember Data delete fails, how to rollback

我的代码就像它,我返回400和我的捕获火和日志,但没有任何反应,当我暂停它在调试器中并尝试回滚时,我得到错误:断言失败:在被破坏的对象上调用set

所以A)我无法回滚B)错误被正常吃掉。

这是我的代码

visitor.destroyRecord().then(function() {
                    console.log('SUCCESS');
                }).catch(function(response) {
                    console.log('failed to remove', response);
                    visitor.rollback();                        
                });

如果相关,我的模型确实有多种关系。我究竟做错了什么? Ember-data版本是1.0.0.8 beta(几天前发布的前一个版本)。

提前致谢。

修改

我现在发现,根据ember检查器,记录实际上当前已在缓存中恢复,但该对象不会在访问者的呈现中重新出现。我需要一些方法来强制它重新加载到模板中......

2 个答案:

答案 0 :(得分:1)

destroyRecord之后,记录消失,无法回滚删除。 catch子句只会捕获服务器错误。如果你想要恢复记录,并认为它仍然在服务器上,你将不得不重新加载它。

请参阅Ember数据源中deleteRecord的以下评论:

Marks the record as deleted but does not save it. You must call
`save` afterwards if you want to persist it. You might use this
method if you want to allow the user to still `rollback()` a
delete after it was made.

这意味着保存后的回滚可能。在DELETE请求失败时,我无法在Ember数据代码中看到以某种方式恢复记录删除的任何迹象。

理论上你可能会使用isDeleted标记,或覆盖各种内部钩子,但我建议不要这样做,除非你真的知道它是如何工作的。

答案 1 :(得分:1)

尝试在回滚后重新加载模型。它将从服务器重新加载,但这是我能找到的唯一方法。

visitor.destroyRecord().then(function() {
                console.log('SUCCESS');
            }).catch(function(response) {
                console.log('failed to remove', response);
                visitor.rollback();
                visitor.reload().then(function(vis)
                {
                    console.log('visitor.reload :: ' + JSON.stringify(vis));
                });
            });

希望有所帮助。