在我的應用程序中,用戶可以創建一條消息併發送它。當用戶發送消息時,將使用createRecord
創建消息,服務器使用201創建成功。Ember Data有重複記錄
此外,用戶可以通過websocket從其他用戶獲取消息。當它收到一條消息時,我將它推入pushPayload
的商店。
var parsedData = JSON.parse(data);
this.store.pushPayload('message', parsedData);
的問題是,當用戶發送的消息並保存它,他們也把它從後面的WebSocket,即使這兩個對象具有相同的ID,店裏有重複的消息結束了。
我怎麼能告訴商店,而不是當我推或保存與已有的元素相同的ID的東西,它應該重寫它?
根據http://emberjs.com/api/data/classes/DS.Store.html#method_pushPayload它應該更新記錄 – Jakeii 2015-04-29 19:45:47
它確實,但只有當websocket響應被延遲時。我相信這個問題是一個競爭條件。處理runloops似乎已經解決了這個問題,但在發佈我的答案之前我會確定。 – 2015-04-29 20:56:38
正如你所說,我認爲運行循環在這裏是可疑的。我會確保你正在執行'Ember.run.next(function(){_this.store.pushPayload(....'所以它在記錄初始化後執行。根據我的經驗,它甚至可以是多個運行循環,在這種情況下,帶有任意長超時的'Ember.run.later'會在故障排除時證實這一點。 – mpowered 2015-05-04 03:40:05