У Ember Data есть дубликаты записей
В моем приложении пользователь может создать сообщение и отправить его. Когда пользователь отправляет сообщение, сообщение создается с помощью createRecord
, и сервер отвечает в случае, если он создан успешно.
Кроме того, пользователь может получать сообщения от других пользователей через websocket. Когда он получает сообщение, я вставляю его в хранилище с помощью pushPayload
.
var parsedData = JSON.parse(data);
this.store.pushPayload('message', parsedData);
Проблема заключается в том, что когда пользователь отправляет сообщение и сохраняет его, он также получает его обратно из websocket, и хотя оба объекта имеют одинаковый идентификатор, хранилище заканчивается дублирующимися сообщениями.
Как я могу сказать хранилище, чем когда я нажимаю или сохраняю что-то с тем же идентификатором уже существующего элемента, он должен переопределять его?
Ответы
Ответ 1
Единственный метод, который я нашел, чтобы избежать этой проблемы, - запустить мое обновление в новой runloop. Если задержка в ms достаточно долго, проблема не будет.
Кажется, что получение обновления из websocket и запроса почти одновременно создает условие гонки в Ember Data.
Ответ 2
Просто выполните проверку, чтобы убедиться, что модель уже находится в хранилище, прежде чем добавлять ее:
var parsedData = JSON.parse(data);
if(this.store.hasRecordForId ('typeOfYourRecord', parsedData.id)){
// logic you want to run when the model is already in the store
var existingItem = this.store.find('typeOfYourRecord', parsedData.id);
// perform updates using returned data here
} else {
this.store.pushPayload('message', parsedData);
}