2017-06-01 32 views
0

在我的應用程序中,我搜索帶查詢的文檔。 然後我編輯單個文檔中的一個屬性,然後再次調用搜索查詢。如何不遺失在Ember查詢hasMany更改?

結果是好的,我看到文檔仍然處於髒狀態並且屬性已更改。

然後我再次選擇其中一個文檔並編輯它的hasMany關係(從2項到4項)。然後我再次調用搜索查詢。 結果不正確,hasMany關係更改丟失/處理/回滾。

有沒有辦法讓Ember查詢(我猜這是一些Ember內部重裝)沒有回滾沒有保存關係的變化?

我使用灰燼2.9.1

現在我比禁止任何過濾器的查詢操作或路由操作任何可能再次打電話查詢沒有別的辦法,因爲這會導致數據丟失用戶組。

回答

1

Ember的store.query方法總是從後端重新提取模型(不像find*方法)。通過查詢,這是確保您擁有最新數據(並且加載到商店中的模型仍然有效)的唯一方法。即使在您的實例中,如果更改數據以使其不再符合查詢條件,也可能會遇到意外結果。

如果您想要在兩次查詢之間進行編輯,我建議複製所有髒的模型(檢查hasDirtyAttributes屬性)。你可以用peekAll來收集它們。複製完成後,您可以製作query並通過ID對記錄進行修補。也許通過使用Ember.assign

即使使用這種方法,我仍然認爲您會遇到問題跟蹤更改並確保記錄與您的查詢保持一致。如果該記錄沒有被返回(在服務器上刪除或不再符合您的條件),您會如何?你放棄編輯?如果服務器的數據與本地版本之間存在衝突(例如,另一用戶修補了其他用戶現在正在查詢和修改的hasMany關係)?

ember-changeset看起來好像可以在這裏使用。但是,如何將ChangeSet應用於同一模型的新實例並不明顯。儘管可以保留snapshot並手動匹配它們。但是,您仍然遇到數據一致性問題。

+0

如果查詢根本沒有更新我編輯的任務,那麼最好。 用戶將編輯任務部門(仍未保存)。然後他會點擊查看未完成的任務,其中編輯的任務也在BOOM部門之間回滾。 如果它在同一時間被刪除,而保存api將對此作出反應。如果它發生了變化,在用戶更改deprartmens之後甚至可能在任何Web應用程序中隨時都會發生,它的web,api將處理重寫最後或衝突的解決方案。 在模型關係上調用reload時不會丟失,但查詢它們是:( –