W mojej aplikacji użytkownik może utworzyć wiadomość i wysłać ją. Gdy użytkownik wyśle wiadomość, wiadomość zostanie utworzona za pomocą createRecord
, a serwer odpowie 201 Utworzono, jeśli się powiedzie.Ember Data ma duplikaty rekordów
Ponadto, użytkownik może otrzymywać wiadomości od innych użytkowników za pośrednictwem websocket. Kiedy otrzyma wiadomość, wrzucam ją do sklepu pod numerem pushPayload
.
var parsedData = JSON.parse(data);
this.store.pushPayload('message', parsedData);
Problem jest, gdy użytkownik wysyła wiadomość i zapisuje je, ale także dostać go z powrotem z websocket i chociaż oba obiekty mają ten sam identyfikator, sklep kończy się duplikaty wiadomości.
Jak mogę powiedzieć sklepowi, kiedy pcham lub zapisuję coś o tym samym identyfikatorze już istniejącego elementu, powinien on nadpisać?
Zgodnie z http://emberjs.com/api/data/classes/DS.Store.html#method_pushPayload powinien zaktualizować rekordy – Jakeii
Tak, ale tylko wtedy, gdy odpowiedź websocket jest opóźniona. Jestem pewien, że problemem jest stan wyścigu. Wydaje się, że radzenie sobie z runami rozwiązało problem, ale upewnię się przed opublikowaniem mojej odpowiedzi. –
Jak wspomniałeś, myślę, że pętla uruchamiania jest tutaj podejrzana. Upewniam się, że robisz 'Ember.run.next (function() {_this.store.pushPayload (....), aby był wykonywany po początkowym zachowaniu rekordu. Z mojego doświadczenia wynika, że może to być nawet wielokrotność uruchom pętle, w którym to przypadku 'Ember.run.later' z arbitralnie długim czasem oczekiwania potwierdzi to w rozwiązywaniu problemów – mpowered