2012-12-03 11 views
19

पर तुरंत मूल्यांकन करता है मैं अपने दृश्य मॉडल को सत्यापित करने के लिए एमवीसी, नॉकआउट और नॉकआउट सत्यापन का उपयोग कर रहा हूं।नॉकआउट प्रमाणीकरण लोड

मैं एक ऐसे मुद्दे पर चल रहा हूं जहां दृश्य मॉडल गुणों के सत्यापन की पुष्टि तुरंत लोड हो रही है। दूसरे शब्दों में, "इस फ़ील्ड की आवश्यकता है" उपयोगकर्ता द्वारा अपने मूल्यों को बदलने का प्रयास करने से पहले मेरे इनपुट के बगल में दिखाया गया है।

यह समस्या विशेष रूप से ड्रॉपडाउन (चयन) नियंत्रणों के साथ हो रही है।

मुझे लगता है कि यह एक समस्या है जिसे मैंने किसी भी तरह से अनजाने में बदलकर/एक्सेस/मेरे जावास्क्रिप्ट कोड के किसी अन्य भाग में अवलोकन करने के द्वारा बनाया है। हालांकि, मुझे नहीं पता कि इसे कैसे ट्रैक किया जाए।

क्या कोई तरीका है कि मैं किसी भी तरह से ऐसी आग को सब्सक्राइब या ट्रैक कर सकता हूं जो नॉकआउट सत्यापन में सत्यापन का कारण बनता है? मुझे सिर्फ यह जानने की जरूरत है कि यह किस तरह से फायरिंग कर रहा है। मुझे पूरा भरोसा है कि isValid() फ़ंक्शन का मान लगातार झूठा है।

<select class="highlightable validationElement" name="obsstate" data-bind="value: standardAnswers.ans106_1.value" required="true"> 
    <option value="">-- Select -- </option> 
     <option value="AK">AK</option> 
     <option value="AL">AL</option> 
     etc... 

</select> 

As displayed on my local machine

उत्तर

7

मैं अपने दम पर इस मुद्दे को पता लगा:

यहाँ कैसे मेरी HTML पृष्ठ लोड पर सेटअप है का एक नमूना, unmolested है।

समस्या विकल्पों को templating रेज़र इंजन के बीच समस्या मौजूद है, और उसके बाद चयनित तत्व के मूल्य को नॉकआउट में बाध्यकारी।

इस तथ्य के बावजूद कि चयन बॉक्स में कोई उपयोगकर्ता-इनपुट मूल्य नहीं है, डिफ़ॉल्ट मान, "- चयन -" वास्तव में एक मान होता है। मेरे मामले में यह एक खाली स्ट्रिंग था। इसलिए, जब मैंने नॉकआउट बाइंडिंग लागू की, तो मेरी व्यूमोडेल संपत्ति खाली स्ट्रिंग मान के साथ "अपडेट" हुई, और इसलिए सत्यापन को निकाल दिया गया।

मेरे मामले में इसे पाने के लिए मैंने अपने मॉडल का डिफ़ॉल्ट मान खाली स्ट्रिंग के रूप में सेट किया है। इसलिए जब बाइंडिंग लागू होते हैं, तो नोकआउट पर देखा जाने वाला कोई मूल्य नहीं है, और इस प्रकार कोई सत्यापन नहीं है।

+0

मैं खाली स्ट्रिंग लेकिन इसकी अभी भी लोड पर फायरिंग करने के लिए मॉडल सेट किया है। मैंने देखा चीजों में से एक यह है कि विकल्प कैप्शन: 'चुनें ...'आइटम में डालता है, लेकिन मान मूल्य नहीं है = "" यह सिर्फ <विकल्प मान> चुनें ... – jmogera

+0

अच्छा उत्तर आदमी !! मेरे लिए काम किया –

9

KO पेज का हवाला देते हुए .... (http://knockoutjs.com/documentation/options-binding.html)

को एक है कि पाठ प्रदर्शित करता है के साथ आइटम की सूची उपसर्ग जाएगा "किसी आइटम का चयन ..." और मूल्य अपरिभाषित है। इसलिए, यदि myChosenValue मान को अनिर्धारित रखता है (जो अवलोकन डिफ़ॉल्ट रूप से करते हैं), तो डमी विकल्प चुना जाएगा। यदि विकल्प कैप्शन पैरामीटर एक अवलोकन योग्य है, तो प्रारंभिक आइटम का पाठ अवलोकन योग्य मान परिवर्तन के रूप में अपडेट होगा।

self.myProperty = ko.observable(undefined).extend({ 
    required : {"Field Required"} 
}); 

आशा इस मदद करता है ...

20

viewmodel के लिए बाइंडिंग लागू करने के बाद:

तो, मैं इसे स्थापित करने "अनिर्धारित" जब संपत्ति को परिभाषित करने, नीचे उदाहरण देखें द्वारा हल किया। फिर उस viewmodel के लिए showAllMessages रूप false

उदाहरण

YourViewmodelname.errors.showAllMessages(false); 
+5

थोड़ा अलग वाक्यविन्यास जो मेरी स्थिति में उपयोगी था: 'ko.validation.group (viewModel())। ShowAllMessages (false); ' –

+0

@ जोनाथनस्ट्रेट इसे पोस्ट करने के लिए धन्यवाद - मेरे मामले में viewmodel.errors को अपरिभाषित किया गया था, और आपका संस्करण काम करता था । – Peanut

+0

ko.applyBindings (...) के बाद, त्रुटियों को समूहित करें और विधि को कॉल करें: ko.validation.group (yourViewModel, {deep: true})। ShowAllMessages (false); – goamn

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