解释:
我正在为我的一个项目使用 ember-data,我有一个问题围绕着弄脏对象然后故意将其状态设置为再次清理的可能性 - 而不提交更改。场景是这样的:
假设我通过 获取了一个对象banana = App.Fruit.find('banana');
,它的描述为“黄色水果!”。使用 XHR 长轮询(或 WebSockets),我可能会收到对象的更新版本,因为另一个用户已将描述更改为“美味的黄色水果!” 在我获取原始对象后的任何给定时间点。
然后,我想做的是更新对象以反映新收到的数据。为此,我尝试了不同的方法:
我试过打电话
App.Store.load(App.Fruit, new_data);
。首先,这种方法不起作用,其次,这不是我真正想要的。我本可以自己对对象进行未提交的更改,在这种情况下,不希望仅丢弃这些更改(假设load()
调用会覆盖它们)。我尝试循环遍历新数据,调用
.set()
- 像这样:banana.set('description', new_data.description);
- 为了用新数据更新对象属性(如果适用=不脏)。这有效,但它使对象处于肮脏状态。
为了使对象再次清洁/更新 - 并且不让适配器提交更改!- 我查看了物体经过的状态。这些是(至少):
- 步骤 1:最初,对象处于
rootState.loaded.saved
状态。 - 第 2 步:调用
.set()
属性将其推送到rootState.loaded.updated.uncommitted
状态。 - 第 3 步:调用
App.store.commit();
将对象返回到rootState.loaded.saved
状态。
因此,我尝试saved
在第 2 步之后手动设置对象状态,如下所示banana.get('stateManager').goToState('saved');
:
但是,这不起作用。下次存储出于任何其他原因提交时,此操作会产生inFlightDirtyReasons is undefined错误。
问题:
我的问题是:如何手动将脏对象的状态再次更改为干净(已保存)?