검사기

검사기는 필드에 새로운 값을 가져와서 있습니다. 필드를 맞춤설정하는 간단한 방법입니다. 이를 통해 필드 값이 변경되거나, 입력을 수정하거나, 필드 값을 제한할 때 허용됩니다.

일반적인 예는 다음과 같습니다.

  • 문자만 허용하도록 텍스트 필드를 제한합니다.
  • 텍스트 필드가 비어 있으면 안 됩니다.
  • 미래 날짜를 입력해야 합니다.
  • 드롭다운을 기반으로 블록의 도형 수정
를 통해 개인정보처리방침을 정의할 수 있습니다.

검사기 유형

검사기는 어떤 종류의 검사기에 있는지에 따라 서로 다른 시점에 실행됩니다. 있습니다.

클래스 검사기는 필드 유형의 클래스 정의의 일부이며, 일반적으로 필드에서 허용하는 값의 유형을 제한하는 데 사용됩니다 (예: 숫자 숫자만 입력할 수 있음). 클래스 검사기는 모든 값에 대해 실행됨 필드로 전달됩니다 (생성자에게 전달된 값 포함).

클래스 검사기에 대한 자세한 내용은 클래스 검사기 구현 섹션을 참조하세요.

로컬 검사기는 필드를 생성할 때 정의됩니다. 지역 유효성 검사 도구에서는 생성자로 전달됩니다. 즉, 다음 환경에서 실행됩니다.

  • XML에 포함된 값입니다.
  • 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);
  }
};

위의 방법 중 하나를 extension으로, JSON 형식을 지원합니다

이 필드의 값은 입력하는 필드의 유형에 따라 매우 다를 수 있습니다. 유효성 검사 (예: 숫자 필드는 숫자를 저장하는 반면 텍스트 입력 필드는 는 문자열을 저장하므로 구체적인 필드를 완료해야 합니다.

반환 값

검사기의 반환 값에 따라 필드의 다음 작업이 결정됩니다. 거기 다음 세 가지 가능성이 있습니다.

수정된 반환 값

수정된 값 또는 다른 값: 이 필드가 필드의 새 값이 됩니다. 주로 후행 삭제와 같이 값을 정리하는 데 사용됩니다. 공백.

수정 검사기의 예:

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

수정 검사기가 있는 텍스트 입력 필드

Null 반환 값

Null: 지정된 값이 유효하지 않음을 의미합니다. 대부분의 경우 입력란에는 입력 값을 무시합니다. 정확한 동작은 필드의 doValueInvalid_ 함수를 사용하세요.

null 유효성 검사기의 예:

// 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 유효성 검사기가 있는 텍스트 입력란

정의되지 않은 반환 값

정의되지 않거나 return 문이 없거나, 입력 값이 필드의 새 값이 되어야 합니다. 이러한 유형의 검사기는 일반적으로 변경 리스너 역할을 합니다

리스너 검사기의 예는 다음과 같습니다.

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

표시 text가 필드의 값을 반드시 반영하지는 않는다는 점에 다시 한번 유의하세요. 을 지정합니다.

이 값의 값

검사기 내부에서 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);
  }
};

다음을 사용하는 샘플 코드 바인딩:

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