โปรแกรมตรวจสอบ

เครื่องมือตรวจสอบคือฟังก์ชันที่จะใส่ค่าใหม่ในช่อง จากนั้นจะดําเนินการ ได้ ซึ่งเป็นวิธีง่ายๆ ในการปรับแต่งช่อง ซึ่งช่วยให้คุณทริกเกอร์ ฟังก์ชันการทำงานเมื่อค่าของช่องมีการเปลี่ยนแปลง แก้ไขอินพุต หรือจำกัดว่าค่าใด ที่ยอมรับได้

ตัวอย่างที่พบบ่อยมีดังนี้

  • การจำกัดช่องข้อความให้ยอมรับเฉพาะตัวอักษร
  • ต้องกรอกข้อมูลในช่องข้อความ
  • กําหนดวันที่ในอนาคต
  • การแก้ไขรูปร่างของบล็อกตามเมนูแบบเลื่อนลง

ประเภทของโปรแกรมตรวจสอบ

โปรแกรมตรวจสอบจะทำงานในเวลาที่แตกต่างกัน โดยขึ้นอยู่กับประเภทโปรแกรมตรวจสอบ

โปรแกรมตรวจสอบชั้นเรียนเป็นส่วนหนึ่งของคำจำกัดความคลาสของประเภทช่อง และเป็น มักใช้เพื่อจำกัดประเภทของค่าที่ช่องอนุญาต (เช่น ตัวเลข ฟิลด์ยอมรับเฉพาะอักขระที่เป็นตัวเลขเท่านั้น) เครื่องมือตรวจสอบชั้นเรียนจะทำงานกับค่าทั้งหมด ที่ส่งผ่านไปยังฟิลด์ (รวมถึงค่าที่ส่งไปยังตัวสร้าง)

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมตรวจสอบชั้นเรียน โปรดดู การใช้เครื่องมือตรวจสอบชั้นเรียน ในส่วนการสร้างฟิลด์ที่กำหนดเอง

ระบบจะกำหนดโปรแกรมตรวจสอบในเครื่องในขณะที่สร้างช่อง ในพื้นที่ โปรแกรมตรวจสอบจะทำงานกับค่าทั้งหมดที่ส่งไปยังฟิลด์ ยกเว้นค่าที่ส่งไปยังฟิลด์ เครื่องมือสร้าง ซึ่งหมายความว่าคุกกี้ทำงานบน

  • ค่าที่อยู่ใน XML
  • ค่าที่ส่งไปยัง setValue
  • ค่าที่ส่งไปยัง setFieldValue
  • ค่าที่ผู้ใช้เปลี่ยนแปลง

โปรแกรมตรวจสอบชั้นเรียนจะทำงานก่อนโปรแกรมตรวจสอบในเครื่อง เนื่องจากโปรแกรมดังกล่าวทำหน้าที่เหมือน ผู้กลั่นกรองข่าวสาร รวมถึงตรวจสอบว่าค่าเป็นประเภทที่ถูกต้องก่อนส่ง เปิดอยู่

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับลำดับการตรวจสอบค่าและค่าใน โปรดดูค่าทั่วไป

การลงทะเบียนโปรแกรมตรวจสอบในเครื่อง

โปรแกรมตรวจสอบในพื้นที่สามารถลงทะเบียนได้ 2 วิธี ดังนี้

  • เพิ่มลงในตัวสร้างของช่องโดยตรง
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

ค่าของช่องอาจแตกต่างกันมาก โดยขึ้นอยู่กับประเภทของฟิลด์ ตรวจสอบแล้ว (เช่น ช่องตัวเลขจะจัดเก็บตัวเลข ในขณะที่ช่องป้อนข้อความ จัดเก็บสตริงไว้) คุณจึงควรอ่านเอกสารประกอบสำหรับ ก่อนที่จะสร้างเครื่องมือตรวจสอบ

แสดงผลค่า

ค่าที่แสดงผลของโปรแกรมตรวจสอบจะเป็นตัวกำหนดสิ่งที่ช่องทำต่อไป มี มีอยู่ 3 รูปแบบ ดังนี้

มูลค่าการคืนสินค้าที่แก้ไข

ค่าที่แก้ไขหรือค่าอื่น ซึ่งจะกลายเป็นค่าใหม่ของช่อง มักจะใช้เพื่อล้างค่า เช่น การลบค่าต่อท้าย การเว้นวรรค

ตัวอย่างตัวตรวจสอบการแก้ไข

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

ช่องป้อนข้อความที่มีโปรแกรมตรวจสอบการแก้ไข

ค่าการแสดงผล Null

Null ซึ่งหมายความว่าค่าที่ระบุไม่ถูกต้อง ในกรณีส่วนใหญ่ ช่องนี้จะ ไม่สนใจค่าที่ป้อน ลักษณะการทำงานที่แน่นอนจะระบุโดยแท็ก doValueInvalid_ function

ตัวอย่างเครื่องมือตรวจสอบ Nulling

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

ช่องป้อนข้อความที่มีโปรแกรมตรวจสอบค่า Null

ค่าการคืนสินค้าที่ไม่ระบุ

ไม่ระบุ (หรือไม่มีข้อความส่งกลับ) หรือค่าอินพุต ซึ่งหมายความว่าฟังก์ชัน ค่าที่ป้อนควรกลายเป็นค่าใหม่ของช่อง เครื่องมือตรวจสอบประเภทเหล่านี้ ทำหน้าที่เปลี่ยนผู้ฟัง

ตัวอย่างโปรแกรมตรวจสอบ Listener

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