I am writing my own adapter for ember data, which uses sockets to communicate with the backend and I have run into an issue with handling server side errors, where records are deleted in ember even though an error has been returned.
Upon a server side error I call within the adapter:
Ember.run(null, reject, json);
where json is the actual description about the error.
When I check the debugger I can see that this bubbles up to:
store.recordWasError(record, reason);
within the _commit function. However it looks like the record is even deleted before it reaches that function.
I have also tried to wrap my error within new DS.InvalidError(json)
, however it seems like ember data expects to be told which fields are in error and complains about the object not having fields it expects.
How do I handle server side errors in a way that I can at least display something like a pop up to the user and the action may be retried? For instance if I just throw an exception during a delete operation, ember data does not seem to notice that and when the button is clicked again, ember complains that the model is already being deleted.
I noticed that I can do something like this in my route and trigger to rollback manually, however I don’t really want to repeat myself on every entity that I want to delete and it seems a little strange that ember data gets out of sync, when I don’t do this:
actions: {
deleteGroup: function(group) {
group.destroyRecord().then(function() {
// transition back to the groups route when delete is complete
this.get('controller').transitionToRoute('groups');
}.bind(this), function() {
group.rollback();
});
}
}
So, I guess I must be doing something wrong…?