2015-09-30 6 views
6

विन्यासबैकएंड मान्यता हमेशा "अनुकूलक को अस्वीकार कर दिया प्रतिबद्ध है क्योंकि यह अवैध था"

  • बैकएंड = Laravel 5.1, डिंगो एपीआई
  • दृश्यपटल = एंबर 1.13.6, एंबर डाटा 1.13 के साथ। 7
  • एडाप्टर = एंबर डाटा RESTAdapter

समस्या

मैं अपने पहले एम्बर एप्लिकेशन पर बैकएंड सत्यापन त्रुटियों को संभालने की कोशिश कर रहा हूं।

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) 

बैकएंड से प्रतिक्रिया एक 422 संसाधन अयोग्य इकाई हैडर है, और सामग्री है: त्रुटियों सर्वर से कर रहे हैं, मैं इस त्रुटि मिलती है

{ 
    "message":"Couldn't save client", 
    "errors":{ 
      "name":["The name field is required."], 
      "email":["The email field is required."] 
     }, 
    "status_code":422 
} 

की कोशिश की (और असफल) समाधान

  • Ember data Rest adapter error handling not working
    RESTAdapter ओ करने के लिए विस्तार ajaxError समारोह verride, मेरा वर्तमान में इस तरह दिखता है:

    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; 
    } 
    } 
    
  • बचाने विधि के लिए कैच बयान जोड़ा जा रहा है, मेरे को बचाने कार्रवाई वर्तमान में है:

    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); 
    } 
    
  • ActiveModelAdapter बाहर परीक्षण - यकीन नहीं क्या मैं इस के साथ सहभागिता करने की उम्मीद कर रहा था, लेकिन मैं बेताब हो गया; नतीजा अभी भी वही था।

  • एंबर डॉक्स (http://guides.emberjs.com/v1.13.0/models/creating-updating-and-deleting-records/#toc_promises)
    आप ऊपर मेरी नियंत्रक कोड में देख सकते हैं, मैं वास्तव में एक आधार

कृपया के रूप में इस्तेमाल आप एक नजर है और सलाह दे सकते हैं? किसी भी सहायता के लिए अग्रिम रूप से धन्यवाद!

+0

ठीक है, तो मैं एंबर डेटा अनइंस्टॉल और यह पुनर्स्थापित और फिर सब कुछ ठीक से काम शुरू कर दिया! – AshleyVee

उत्तर

0

मेरे app/adapters/application.js:

export default DS.RESTAdapter.extend({ 
    ajaxError(jqXHR) { 
    var error, errors, jsonErrors, response; 
    error = this._super(jqXHR); 

    if (jqXHR && jqXHR.status === 422) { 
     response = Ember.$.parseJSON(jqXHR.responseText); 
     errors = {}; 
     if (response.errors != null) { 
     jsonErrors = response.errors; 
     Ember.keys(jsonErrors).forEach(function(key) { 
      return errors[Ember.String.camelize(key)] = jsonErrors[key]; 
     }); 
     } 
     return new DS.InvalidError(errors); 
    } else { 
     return error; 
    } 
    } 
}); 

मॉडल के लिए कस्टम ServerErrorsMixin के साथ संयुक्त: एंबर डाटा 1.0.0-beta.18 में

export default Ember.Mixin.create({ 
    isntValid: Ember.computed.not('isValid').readOnly(), 

    adapterDidInvalidate(errors) { 
    let recordErrors = this.get('errors'), 
     hasProp = {}.hasOwnProperty; 

    for (let key in errors) { 
     if (!hasProp.call(errors, key)) { 
     continue; 
     } 

     let propertyErrors = errors[key]; 

     if(key === 'duplicate') { 
     if(!Ember.isArray(propertyErrors)) { 
      recordErrors 
      .get('messages') 
      .pushObject(propertyErrors); 
     } else { 
      Ember.debug('It shouldnt be an array.'); 
     } 
     } else { 
     for (let e of propertyErrors) { 
      recordErrors 
      .get(key) 
      .pushObject(e); 
     } 
     } 
    } 

    this._saveWasRejected(); 
    } 
}); 

वर्क्स ठीक। आप कोशिश करते हैं इस मॉडल में ServerErrorsMixin से विस्तार करने के लिए याद रखें:

import ServerErrorsMixin from '../mixins/server-errors'; 

export default DS.Model.extend(ServerErrorsMixin, { 
    // ... 
}) 
+0

मैंने अभी ठीक से यह कोशिश की है जैसा आपने वर्णन किया है, लेकिन मुझे अभी भी वही त्रुटि मिल रही है। यह निश्चित रूप से AJAXError विधि को मार रहा है, मैंने उस बिंदु पर त्रुटियों को लॉग इन किया है, लेकिन यह मिश्रित में "adapterDidInvalidate" को कभी भी हिट नहीं करता है, जिसे मैंने अब अपने मॉडल में उपयोग किया है। – AshleyVee

संबंधित मुद्दे

 संबंधित मुद्दे