configurazionebackend di convalida con RESTAdapter sempre "L'adattatore ha respinto il commit perché era valido"
- backend = laravel 5.1, con Dingo API
- Frontend = Ember 1.13.6, Ember dati 1.13. 7
- Adapter = Ember dati RESTAdapter
Il problema
Sto provando a gestire gli errori di convalida del backend sulla mia prima applicazione Ember. Quando gli errori vengono restituiti dal server, ottengo questo errore:
Error: The adapter rejected the commit because it was invalid
at new Error (native)
at Error.EmberError (http://localhost:4200/assets/vendor.js:26266:21)
at Error.ember$data$lib$adapters$errors$$AdapterError (http://localhost:4200/assets/vendor.js:69564:50)
at Error.ember$data$lib$adapters$errors$$InvalidError (http://localhost:4200/assets/vendor.js:69637:52)
at ajaxError (http://localhost:4200/assets/frontend.js:16:24)
at ember$data$lib$system$adapter$$default.extend.ajax.Ember.RSVP.Promise.hash.error (http://localhost:4200/assets/vendor.js:71327:31)
at jQuery.Callbacks.fire (http://localhost:4200/assets/vendor.js:3350:30)
at Object.jQuery.Callbacks.self.fireWith [as rejectWith] (http://localhost:4200/assets/vendor.js:3462:7)
at done (http://localhost:4200/assets/vendor.js:9518:14)
at XMLHttpRequest.jQuery.ajaxTransport.options.send.callback (http://localhost:4200/assets/vendor.js:9920:8)
La risposta da parte del back-end ha un'intestazione 422 Unprocessable entità, e il contenuto è:
{
"message":"Couldn't save client",
"errors":{
"name":["The name field is required."],
"email":["The email field is required."]
},
"status_code":422
}
provato (e fallito) soluzioni
Ember data Rest adapter error handling not working
Estendere il RESTAdapter per o verride la funzione ajaxError, miniera attualmente appare così:ajaxError: function(jqXHR) { var error = this._super(jqXHR); if (jqXHR && jqXHR.status === 422) { var jsonErrors = Ember.$.parseJSON(jqXHR.responseText).errors; return new DS.InvalidError(jsonErrors); } else { return error; } }
Aggiunta di un'istruzione catch per il metodo di salvataggio, il mio salvare l'azione è attualmente:
save() { var self = this; function transitionToPost(post) { self.transitionToRoute('clients.show', post); } function failure(reason) { // handle the error console.log(reason); return false; } this.get('model').save().then(transitionToPost, failure).catch(failure); }
testare l'ActiveModelAdapter - non so cosa Mi aspettavo di ottenere questo, ma mi sono disperata; il risultato era sempre lo stesso.
Ember Docs (http://guides.emberjs.com/v1.13.0/models/creating-updating-and-deleting-records/#toc_promises)
Come si può vedere nel mio codice di controllo di cui sopra, in realtà ho usato questo come base
prega si può avere uno sguardo e consigliare? Grazie in anticipo per qualsiasi aiuto!
OK, così ho disinstallato i dati di ember e reinstallato e poi tutto ha iniziato a funzionare correttamente! – AshleyVee