2012-12-19 20 views
3

我的Ember/Ember-Data/Rails應用程序使用WebSocket將數據向下推送到客戶端。我使用Ember-Data的loadMany方法將推送的數據添加到商店。如何使用Ember-Data加載推送記錄更新而不與inFlight交易衝突?

但是,如果任何推送的記錄正在編輯和保存,則loadMany將失敗,因爲記錄當前處於inFlight狀態。例如:

- >用戶編輯記錄,並點擊保存
- > Ember公司-數據開始提交當前事務
- > Rails的控制器更新JSON響應此記錄並公佈通過的WebSockets
更新的數據 - >交易完成之前收到WebSockets數據,Ember-Data嘗試使用此新數據更新記錄,然後記錄標記爲清除

我發現的唯一解決方案是推遲使用Ember應用更新。 run.later的超時時間約爲20ms。 (Ember.run.next沒有工作。)

但是,這隻處理用戶剛剛保存記錄的情況。如果巧合,用戶正在編輯的記錄由其他人編輯,並且在事務完成之前接收到推送更新,則衝突仍會發生並觸發錯誤。

所以我的問題是,有沒有一些方法之一:

(一)從嘗試時受影響的記錄飛行負載變化防止商店;或(b)推遲推送更新,直到所有交易清潔爲止。

回答

1

*crickets*

現在,我已經通過手工檢查,如果該記錄是在未更新的狀態,如果是這樣,對於註冊時退出該狀態的回調解決了這個。然後在回調之後,我檢查推送更新是否具有比該記錄更近的updatedAt值,如果是,則合併這兩個值。

相關問題