0

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

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

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

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

我正在使用 Ember 2.9.1

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

4

1 回答 1

1

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

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

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

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

于 2017-06-02T21:05:23.683 回答