如何不丢失Ember查询有多少变化?

时间:2017-06-01 11:39:58

标签: ember.js ember-data ember-2.0.0

在我的应用程序中,我搜索带有查询的文档。 然后我在一个文档中编辑一个属性,然后再次调用搜索查询。

结果没问题,我看到文档仍处于脏状态且属性已更改。

然后我再次选择一个文档并编辑其hasMany关系(从2个项目到4个项目)。然后我再次调用搜索查询。 结果不正常,多个关系更改丢失/丢弃/回滚。

有没有办法让Ember查询(我猜它是一些Ember内部重载)不回滚没有保存的关系更改?

我正在使用Ember 2.9.1

现在我除了禁止任何过滤查询操作或路由操作可以再次调用查询的任何其他方法之外别无其他方法,因为这会导致用户设置的数据丢失。

1 个答案:

答案 0 :(得分:1)

Ember的store.query方法总是从后端重新获取模型(与find*方法不同)。通过查询,这是确保您拥有最新数据(以及加载到商店中的模型仍然有效)的唯一方法。即使在您的实例中,如果您更改数据使其不再符合查询条件,也可能会遇到意外结果。

如果您想在查询之间保持编辑,我建议制作一份脏的所有模型的副本(检查hasDirtyAttributes属性)。您可以使用peekAll收集它们。复制后,您可以创建query并按ID修补记录。也许使用Ember.assign

即使使用该方法,我仍然会认为您在跟踪更改并确保记录与查询保持一致时会遇到问题。如果没有返回该记录(在服务器上删除或不再符合您的标准),您会怎样?你放弃编辑了吗?如果服务器中的数据与本地版本之间存在冲突(例如,另一个用户修补了另一个用户正在查询和修改的hasMany关系),该怎么办?

ember-changeset似乎在这里很有用。但是,如何将ChangeSet应用于同一模型的新实例并不明显。虽然可以保留snapshot并手动匹配它们。但是,您仍然遇到数据一致性问题。