2012-02-14 12 views
12

AJAX जेसन प्रतिक्रियाएं वापस आती हैं जब आप नॉकआउट जेएस के लिए सबसे अच्छा अभ्यास करते हैं।knockout js सर्वोत्तम प्रथाओं AJAX त्रुटि हैंडलिंग

उपयोगकर्ता को त्रुटि उत्पन्न करने के लिए आप अपनी मैपिंग कैसे बनाते हैं? त्रुटियों को समायोजित करने के लिए नॉकआउट जेएस में किसी फ़ॉर्म के बाध्यकारी को आप कैसे बदलते हैं?

मैं की एक प्रतिक्रिया ऑब्जेक्ट वापस भेज {: "सफलता", डेटा: प्रतिक्रिया {}} है, जो एक तरह से वहाँ त्रुटि के 3 स्तरों हैं कि इसका मतलब है:

  1. मॉडल त्रुटि (के json वस्तु प्रतिक्रिया "विफलता", क्या क्षेत्रों के मॉडल डेटा के साथ गलत थे)
  2. सर्वर त्रुटि (सर्वर से कोई जवाब नहीं)
  3. सर्वर त्रुटि कोड

पता लगा नहीं एक प्रदर्शित करने में एक साफ viewmodel रास्ता के साथ प्रतिक्रिया ग़लती होना या संदेश यही कारण है कि मैं पूछ रहा हूँ।

उत्तर

7

व्यक्तिगत रूप से मैं केवल सफलता पर नॉकआउट मॉडल अपडेट करता हूं। यह तब त्रुटि से पहले एक ही स्थिति में मॉडल छोड़ देता है।

किसी त्रुटि के मामले में, आप ऐसा कुछ भी कर सकते हैं जिसे आप उपयोगकर्ता को बताना चाहते हैं कि कोई त्रुटि हुई है। मैं उपयोगकर्ता को एक संदेश दिखाने के लिए humane.js का उपयोग करूंगा कि किसी कारण से अद्यतन या निर्माण विफल रहा है। मॉडल त्रुटि के लिए अपने तीन मामलों में, कोई जवाब नहीं या सर्वर त्रुटि, आपको त्रुटि समारोह में पद का राज्य की जांच कर सकता है और उपयोगकर्ता के प्रदर्शित करने के लिए एक अलग संदेश चुनें

वे तो स्वतंत्रता एक ही बात करना है दोबारा, या उनकी गलती को सही करें और पुनः प्रयास करें।

$.post("somewhere") 
.success(function() { 
    // update knockout models here 
}) 
.error(function() { 
    // show error message to user 
}) 
.complete(function() { 
    // reset any temporary variables 
}); 
9

तरह से मैं KO में त्रुटि हैंडलिंग लेकर आए हैं एक आधार वर्ग बनाने के लिए किया गया है:

errorHandlingViewModel = function() { 
    var self = this; 
    self.ErrorText = ko.observable(); 
    self.errorHandler = function (jqXHR, textStatus, errorThrown) { 
     self.ErrorText('An error has occured, please refresh the page and try again in a little while. (' + textStatus + ':' + errorThrown + ')'); 
    }; 
    self.validationErrorHandler = function (err) { 
     //todo 
     alert('validation error ' + err); 
    } 
    self.successHandler = function (data, onSuccess) { 
     if (data.result == "success") { 
      if (onSuccess) { 
       onSuccess(data.data); 
      } 
     } 
     else { 
      if (data.data && data.data.Tag) { 
       if (data.data.Tag == "ValidationError") { 
        validationErrorHandler(data.data.Tag); 
       } 
      } 
      errorHandler(null, data.result, data.data); 
     } 
    }; 
}; 

यह एक नमूदार ErrorText क्षेत्र है।

मेरे सभी ViewModels इस त्रुटि से निपटने की जरूरत है कि मूलरूप विरासत का उपयोग कर सकते हैं:

viewModel.prototype = new errorHandlingViewModel(); 
var mainViewModel = new viewModel(); 
ko.applyBindings(mainViewModel, $("#locationTOApplyBindingTo")[0]); 

इस दृश्य मॉडल ajax कॉल में देखने की तरह:

$.ajax({ 
    type: 'POST', 
    url: myURL, 
    data: myData, 
    success: function (data) {self.successHandler(data,success);}, 
    error: self.errorHandler 
}); //end ajax 

यूआई एक सामान्य डाटा-बाँध है:

<div class="error" data-bind="visible:ErrorText"> 
    <div class="innerMSGContainer"> 
     <div class="innerMSG" data-bind="text:ErrorText"></div> 
    </div> 
</div> 

जावास्क्रिप्ट का प्रयास करें-पकड़ने अभी भी इस मॉडल से लापता है के रूप में मैं pl को लेकर अनिश्चित हूं एसेमेंट

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