2013-09-23 7 views
7

मैं गिटहब से नॉकआउटज सत्यापन जोड़ने का प्रयास करने की कोशिश कर रहा हूं। ऐसा लगता है कि इसमें से अधिकांश ठीक काम करते हैं लेकिन जब मैं विस्तारित सत्यापन का उपयोग करने की कोशिश करता हूं, तो एक्सेल (पासवर्ड/पुष्टिकरण पासवर्ड) ऐसा कुछ नहीं लगता है। मैं क्या खो रहा हूँ?के लिए नॉकआउटज सत्यापन या समान उदाहरण उदाहरण

मैं भविष्य में उपयोग के लिए इस विस्तारक तकनीक को सीखना चाहता हूं।

(भी इस पूरे HTML और जावास्क्रिप्ट AJAX कॉल के माध्यम से पेज लोड मिलता है। यह है कि अगर यह से कोई लेना देना नहीं है।)

मेरे जावास्क्रिप्ट

function UserAccount(data) { 
     var self = this; 
     self.Password = ko.observable(data.Password).extend({ required: true, minlength: 6, message: "Password is required", maxLength: 12 }); 

     self.Firstname = ko.observable(data.Firstname).extend({ required: true, minlength: 6, message: "Firstname is required", maxLength: 40 }); 
     self.Lastname = ko.observable(data.Lastname).extend({ required: true, minlength: 6, message: "Lastname is required", maxLength: 40 }); 
     self.Email = ko.observable(data.Email).extend({ required: true, minlength: 6, message: "Email is required", email: true, maxLength: 90 }); 
     self.ConfirmPassword = ko.observable().extend({ mustEqual: self.Password()}); 
     ...........................Other Code............ 
     } 

    ko.validation.rules['mustEqual'] = { 
     validator: function (val, otherVal) { 
      alert("Hello"); 
      return val === otherVal; 
     }, 
     message: 'The field must equal {0}' 
    }; 
    $(document).ready(function() { 


     ko.applyBindings(new UserAccount(initdata), $("#UserAccount").get(0)); 
     ko.validation.registerExtenders(); 

    }); 

उत्तर

10

आपका कस्टम सत्यापनकर्ता कोड ठीक है। लेकिन आप सही ढंग से ko.validation.registerExtenders(); विधि को कॉल नहीं कर रहे हैं।

हालांकि यह स्पष्ट रूप से कहा नहीं है, लेकिन आप कॉल करना ko.validation.registerExtenders(); इससे पहले कि आप ko.applyBindings बुला रहे हैं की जरूरत है।

$(document).ready(function() { 
    ko.validation.registerExtenders(); 
    ko.applyBindings(new UserAccount(initdata), $("#UserAccount").get(0)); 
}); 

लेकिन आप एक और समस्या का सामना करना पड़ेगा:

तो अपने कोड को ठीक करने तुम सिर्फ लिखने की ज़रूरत mustEqual सत्यापनकर्ता स्थिर मूल्यों के लिए की तुलना के लिए है अगर आप दो तुलना करना चाहते हैं तो यह काम नहीं करेगा पासवर्ड की पुष्टि पासवर्ड के साथ पासवर्ड।

आपको क्या चाहिए user contributed "Are Same" validator की तरह कुछ है:

ko.validation.rules['areSame'] = { 
    getValue: function (o) { 
     return (typeof o === 'function' ? o() : o); 
    }, 
    validator: function (val, otherField) { 
     return val === this.getValue(otherField); 
    }, 
    message: 'The fields must have the same value' 
}; 

आप की तरह उपयोग कर सकते हैं क्या:

self.Password = ko.observable(data.Password).extend({ 
    required: true, 
    minlength: 6, 
    message: "Password is required", 
    maxLength: 12 
}); 
self.ConfirmPassword = ko.observable().extend({ 
    areSame: self.Password 
}); 

डेमो JSFiddle

+0

यह काम किया। मैं वास्तव में पहले समान समारोह के साथ काम कर रहा था लेकिन इसे काम नहीं कर सका। मैं mustEqual पर स्विच किया क्योंकि यह आसान लग रहा था। क्या ko.validation ... और ko.apply बाइंडिंग हमेशा $ (दस्तावेज़) में होनी चाहिए। पहले से ही? – DanScan

+0

आपके डॉम लोड होने के बाद 'ko.applyBindings' को कॉल किया जाना चाहिए ताकि' $ (दस्तावेज़) .ready' इसे रखने के लिए एक अच्छी जगह हो। 'Ko.validation.registerExtenders(); 'आपके सभी कस्टम सत्यापनकर्ताओं को परिभाषित करने के बाद कहा जाना चाहिए। इसलिए इसे 'ko.validation.rules [' areSame '] = {} 'के बाद सीधे कहा जा सकता है, इसलिए इसे' $ (दस्तावेज़) .ready' में कॉल करना आवश्यक नहीं है। – nemesv

+0

पृष्ठ लोड होने पर मैं फायरिंग से सत्यापन को कैसे रोकूं? – DanScan

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