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