पुष्टि करने वाले प्रोग्राम

पुष्टि करने वाला टूल एक ऐसा फ़ंक्शन है जो फ़ील्ड में नई वैल्यू डालता है और फिर उस पर काम करता है. ये किसी फ़ील्ड को पसंद के मुताबिक बनाने का आसान तरीका है. इनकी मदद से, किसी फ़ील्ड की वैल्यू में बदलाव होने, इनपुट में बदलाव करने या स्वीकार की जाने वाली वैल्यू को सीमित करने पर, फ़ंक्शन को ट्रिगर करने की सुविधा मिलती है.

कुछ सामान्य उदाहरण:

  • किसी टेक्स्ट फ़ील्ड में, सिर्फ़ अक्षर स्वीकार करने पर पाबंदी लगाना.
  • यह ज़रूरी है कि टेक्स्ट फ़ील्ड खाली न हो.
  • आने वाले समय की कोई तारीख चुनें.
  • ड्रॉपडाउन के आधार पर किसी ब्लॉक के आकार में बदलाव करना.

पुष्टि करने वाले अलग-अलग तरह के टूल

पुष्टि करने वाले प्रोग्राम अलग-अलग समय पर लागू होते हैं. यह इस बात पर निर्भर करता है कि पुष्टि करने वाले प्रोग्राम किस तरह के हैं.

क्लास की पुष्टि करने वाले प्रोग्राम, एक फ़ील्ड टाइप की क्लास डेफ़िनिशन का हिस्सा होते हैं.आम तौर पर, इनका इस्तेमाल फ़ील्ड की ओर से मंज़ूर की गई वैल्यू के टाइप को सीमित करने के लिए किया जाता है. उदाहरण के लिए, नंबर वाले फ़ील्ड सिर्फ़ न्यूमेरिक वर्णों को स्वीकार करते हैं. क्लास की पुष्टि करने वाले प्रोग्राम, फ़ील्ड को पास की जाने वाली सभी वैल्यू (इसमें कंस्ट्रक्टर को भेजी गई वैल्यू भी शामिल है) पर चलाए जाते हैं.

क्लास की पुष्टि करने वाले प्रोग्राम के बारे में ज़्यादा जानने के लिए, कस्टम फ़ील्ड बनाने के सेक्शन में क्लास की पुष्टि करने वाले प्रोग्राम को लागू करना सेक्शन देखें.

लोकल वैलिडेटर, फ़ील्ड को बनाते समय तय किए जाते हैं. लोकल वैलिडेटर, कंस्ट्रक्टर को भेजी गई वैल्यू को छोड़कर फ़ील्ड में पास की जाने वाली सभी वैल्यू पर चलते हैं. इसका मतलब है कि वे इन पर चलते हैं:

  • एक्सएमएल में शामिल वैल्यू.
  • setValue में भेजी गई वैल्यू.
  • setFieldValue को पास की गई वैल्यू.
  • उपयोगकर्ता ने जिन वैल्यू में बदलाव किया है.

क्लास की पुष्टि करने वाले प्रोग्राम, स्थानीय पुष्टि करने वालों से पहले चलाए जाते हैं, क्योंकि वे गेटकीपर की तरह काम करते हैं. वे वैल्यू को पास करने से पहले यह पक्का करते हैं कि वह सही तरह का हो.

वैल्यू की पुष्टि के क्रम और सामान्य वैल्यू के बारे में ज़्यादा जानने के लिए, वैल्यू देखें.

स्थानीय पुष्टि करने वाले को रजिस्टर करना

लोकल पुष्टि करने वाले प्रोग्राम दो तरीकों से रजिस्टर किए जा सकते हैं:

  • सीधे फ़ील्ड के कंस्ट्रक्टर में जोड़ा गया.
Blockly.Blocks['validator_example'] = {
  init: function() {
    // Remove all 'a' characters from the text input's value.
    var validator = function(newValue) {
      return newValue.replace(/\a/g, '');
    };

    this.appendDummyInput()
        .appendField(new Blockly.FieldTextInput('default', validator));
  }
};
Blockly.Blocks['validator_example'] = {
  init: function() {
    // Remove all 'a' characters from the text input's value.
    var validator = function(newValue) {
      return newValue.replace(/\a/g, '');
    };

    var field = new Blockly.FieldTextInput('default');
    field.setValidator(validator);

    this.appendDummyInput().appendField(field);
  }
};

JSON फ़ॉर्मैट के साथ काम करने के लिए, ऊपर दिए गए किसी भी तरीके को एक्सटेंशन में रैप किया जा सकता है.

जिस फ़ील्ड की पुष्टि की जा रही है उसके आधार पर फ़ील्ड की वैल्यू काफ़ी अलग हो सकती है.उदाहरण के लिए, नंबर फ़ील्ड किसी नंबर को सेव करेगा, जबकि टेक्स्ट इनपुट फ़ील्ड किसी स्ट्रिंग को सेव करेगा. इसलिए, पुष्टि करने वाला प्रोग्राम बनाने से पहले, अपने खास फ़ील्ड से जुड़े दस्तावेज़ों को पढ़ना बेहतर होगा.

नतीजे में मिलने वाली वैल्यू

पुष्टि करने वाले प्रोग्राम की रिटर्न वैल्यू से तय होता है कि फ़ील्ड आगे क्या करेगा. इसकी तीन संभावनाएं हैं:

बदले गए रिटर्न की वैल्यू

कोई बदलाव किया गया या कोई दूसरी वैल्यू, जो इसके बाद फ़ील्ड की नई वैल्यू बन जाती है. इसका इस्तेमाल अक्सर किसी वैल्यू को हटाने के लिए किया जाता है, जैसे कि पीछे वाले व्हाइटस्पेस को हटाना.

बदलाव की पुष्टि करने वाले प्रोग्राम का उदाहरण:

// Remove all 'a' characters from the text input's value.
var validator = function(newValue) {
  return newValue.replace(/\a/g, '');
};

बदलाव करने की पुष्टि करने वाले प्रोग्राम के साथ टेक्स्ट इनपुट फ़ील्ड

कोई रिटर्न वैल्यू नहीं

शून्य, इसका मतलब है कि दी गई वैल्यू अमान्य है. ज़्यादातर मामलों में, फ़ील्ड इनपुट वैल्यू को अनदेखा कर देगा. सटीक व्यवहार, फ़ील्ड के doValueInvalid_ फ़ंक्शन से तय होता है.

शून्य की पुष्टि करने वाले प्रोग्राम का उदाहरण:

// Any value containing a 'b' character is invalid.  Other values are valid.
var validator = function(newValue) {
  if (newValue.indexOf('b') != -1) {
    return null;
  }
  return newValue;
};

शून्य की पुष्टि करने वाले प्रोग्राम के साथ टेक्स्ट इनपुट फ़ील्ड

तय नहीं किया गया रिटर्न वैल्यू

तय नहीं है (या कोई रिटर्न स्टेटमेंट नहीं है) या इनपुट वैल्यू है, जिसका मतलब है कि इनपुट वैल्यू को फ़ील्ड का नया मान होना चाहिए. आम तौर पर, इस तरह के पुष्टि करने वाले टूल लोगों को बदलने का काम करते हैं.

लिसनर की पुष्टि करने वाले प्रोग्राम का उदाहरण:

// Log the new value to console.
var validator = function(newValue) {
  console.log(newValue);
};

एक बार फिर ध्यान दें कि कैसे डिसप्ले टेक्स्ट, फ़ील्ड की वैल्यू को ज़रूरी नहीं दिखाता.

इसकी वैल्यू

पुष्टि करने वाले टूल में this का मतलब फ़ील्ड से होता है, न कि ब्लॉक को. अगर आपको किसी पुष्टि करने वाले प्रोग्राम के अंदर मौजूद ब्लॉक को ऐक्सेस करना है, तो getSourceBlock फ़ंक्शन का इस्तेमाल करें. ऐसे कॉन्टेक्स्ट को सेट करने के लिए भी बाइंड फ़ंक्शन का इस्तेमाल किया जा सकता है जिसमें पुष्टि करने वाले प्रोग्राम को कॉल किया जाता है.

getSourceBlock का इस्तेमाल करने वाला सैंपल कोड:

Blockly.Blocks['colour_match'] = {
  init: function() {
    this.appendDummyInput()
        .appendField(new Blockly.FieldColour(
            null, this.validate
        ), 'COLOUR');
    this.setColour(this.getFieldValue('COLOUR'));
  },

  validate: function(colourHex) {
    this.getSourceBlock().setColour(colourHex);
  }
};

bind का इस्तेमाल करके सैंपल कोड:

Blockly.Blocks['colour_match'] = {
  init: function() {
    this.appendDummyInput()
      .appendField(new Blockly.FieldColour(
          null, this.validate.bind(this)
      ), 'COLOUR');
    this.validate(this.getFieldValue('COLOUR'));
  },

  validate: function(colourHex) {
    this.setColour(colourHex);
  }
};