【问题标题】:Force reload of dirty/invalid model in Ember在 Ember 中强制重新加载脏/无效模型
【发布时间】:2013-12-17 18:40:14
【问题描述】:

我正在尝试为目标记录构建编辑功能。在目标索引页面上,每个目标旁边都有一个编辑按钮。单击后,每个字段都变为可编辑的。单击保存后,更改将保存到服务器。到现在为止还挺好。

还有一个取消按钮。当用户单击它时,我需要将模型的状态重置为他们更改之前的状态。控制器中的goal.rollback() 可以正常工作。除非用户已经单击了保存但服务器端验证失败。在这种情况下,尝试 rollback() 会抛出 Uncaught Error: Attempted to handle event `reloadRecord` on <App.Goal:ember123:1234> while in state root.loaded.updated.invalid.

如果我尝试goal.reloadRecord 我会得到Uncaught Error: Attempted to handle event `reloadRecord` on <App.Goal:ember123:1234> while in state root.loaded.updated.invalid.

goal.unloadRecord 相同。我试过这样按摩状态:

state = goal.get('currentState') #this code makes me sad.
state.isValid = true
state.isError = false

像这样:

goal.transitionTo('loaded.saved')

无济于事。对我来说,重新加载或卸载记录应该是有状态的,这对我来说是零意义的。

任何帮助将不胜感激。同样,我试图在 ember 中获取一条肮脏、无效的记录,并通过回滚更改或仅从服务器重新加载它来使其恢复到快乐状态。

编辑:Ember-data v1.0.0-beta.3-4-g169793e,ember 版本:1.1.2

【问题讨论】:

  • 在我出现保存错误后,回滚似乎正在工作,您使用的是 Ember Data 吗?如果有,是哪个版本?
  • Ember-data v1.0.0-beta.3-4-g169793e,ember 版本:1.1.2。
  • 明白了,我添加了一个工作示例,有什么不同吗?

标签: ember.js ember-data


【解决方案1】:

这是一个工作示例,更改颜色然后点击保存。

http://emberjs.jsbin.com/OxIDiVU/44/edit

公关提交https://github.com/emberjs/data/pull/1590

【讨论】:

  • 哇,谢谢!像这样的一个单独的取消功能:emberjs.jsbin.com/OxIDiVU/49/edit?html,css,js 是我想要完成的,但这确实有效,所以当我今天下午晚些时候回来时,我会尝试看看我在我的代码中做了什么不同的事情并想出一个 jsbin 演示了这个问题。再次感谢!
  • 好的,我发现了区别。在 jsbin 中,模型在更新失败后状态为“root.loaded.updated.uncommitted”。在更新失败后的代码中,模型的状态为“root.loaded.updated.invalid”。我认为不同之处在于服务器返回的 http 代码。在 jsbin 的情况下,它是 403。在我的应用程序的情况下,它是 422。确实,当我让服务器返回 403 时,模型的状态为“root.loaded.updated.uncommitted”,所以回滚有效:) 这是解决这个问题的正确方法吗?
  • 您使用的是哪个适配器?
  • 您正在使用活动模型适配器,其余适配器工作。 emberjs.jsbin.com/OxIDiVU/55/edit
  • 您可以将记录上的isError设置为true,然后调用回滚,这对我来说似乎是一个错误。 emberjs.jsbin.com/OxIDiVU/56/edit
猜你喜欢
  • 2014-06-10
  • 2018-02-26
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2014-07-16
  • 2012-11-10
  • 1970-01-01
相关资源
最近更新 更多