검사기는 필드에 새로운 값을 가져와서 있습니다. 필드를 맞춤설정하는 간단한 방법입니다. 이를 통해 필드 값이 변경되거나, 입력을 수정하거나, 필드 값을 제한할 때 허용됩니다.
일반적인 예는 다음과 같습니다.
- 문자만 허용하도록 텍스트 필드를 제한합니다.
- 텍스트 필드가 비어 있으면 안 됩니다.
- 미래 날짜를 입력해야 합니다.
- 드롭다운을 기반으로 블록의 도형 수정
검사기 유형
검사기는 어떤 종류의 검사기에 있는지에 따라 서로 다른 시점에 실행됩니다. 있습니다.
클래스 검사기는 필드 유형의 클래스 정의의 일부이며, 일반적으로 필드에서 허용하는 값의 유형을 제한하는 데 사용됩니다 (예: 숫자 숫자만 입력할 수 있음). 클래스 검사기는 모든 값에 대해 실행됨 필드로 전달됩니다 (생성자에게 전달된 값 포함).
클래스 검사기에 대한 자세한 내용은 클래스 검사기 구현 섹션을 참조하세요.
로컬 검사기는 필드를 생성할 때 정의됩니다. 지역 유효성 검사 도구에서는 생성자로 전달됩니다. 즉, 다음 환경에서 실행됩니다.
- 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));
}
};
- 다음으로 바꿉니다. setValidator.
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;
};
정의되지 않은 반환 값
정의되지 않거나 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);
}
};