我正在研究当从服务器返回错误时如何在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检查器,记录实际上当前已在缓存中恢复,但该对象不会在访问者的呈现中重新出现。我需要一些方法来强制它重新加载到模板中......
答案 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));
});
});
希望有所帮助。