В моем приложении пользователь может создать сообщение и отправить его. Когда пользователь отправляет сообщение, сообщение создается с помощью createRecord
, и сервер отвечает в 201, если он был успешно выполнен.Данные Ember имеют повторяющиеся записи
Кроме того, пользователь может получать сообщения от других пользователей через websocket. Когда он получает сообщение, я ввожу его в магазин с pushPayload
.
var parsedData = JSON.parse(data);
this.store.pushPayload('message', parsedData);
Проблема заключается в том, когда пользователь отправляет сообщение и сохраняет его, они также получить его обратно от WebSocket, и даже если оба объекта имеют один и тот же идентификатор, магазин заканчивает с дублированием сообщений.
Как я могу сказать хранилище, чем когда я нажимаю или сохраняю что-то с тем же идентификатором уже существующего элемента, он должен переопределять его?
Согласно http://emberjs.com/api/data/classes/DS.Store.html#method_pushPayload, он должен обновлять записи – Jakeii
Он делает это, но только при отсрочке ответа на веб-расклад. Я уверен, что проблема - это состояние гонки. Сделка с runloops, похоже, устранила проблему, но я буду уверен, прежде чем отправлять ответ. –
Как вы уже упоминали, я думаю, что здесь существует подозрительный цикл. Я бы удостоверился, что вы делаете 'Ember.run.next (function() {_this.store.pushPayload (....' поэтому он выполняется после того, как запись изначально сохраняется. По моему опыту, она может быть даже кратной и в этом случае 'Ember.run.later' с произвольным длительным таймаутом подтвердит это при поиске и устранении неисправностей. – mpowered