पुष्टि करने वाले टूल

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

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

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

मान्य करने वाले अलग-अलग तरीके

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

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

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

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

  • एक्सएमएल में मौजूद वैल्यू.
  • 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_ function में दी गई है.

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

// 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 फ़ंक्शन का इस्तेमाल करें. bind फ़ंक्शन का इस्तेमाल करके, उस कॉन्टेक्स्ट को भी सेट किया जा सकता है जिसमें वैलिडेटर को कॉल किया जाता है.

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);
  }
};