Walidator to funkcja, która pobiera z pól nową wartość, a następnie działa na . To prosty sposób na dostosowanie pola. Umożliwiają wywołanie funkcjonalność, gdy wartość pola ulegnie zmianie, dane wejściowe lub ograniczenie zostaną są dopuszczalne.
Oto kilka typowych przykładówSome common examples:
- Ograniczyć pole tekstowe do akceptowania wyłącznie liter.
- Nie wymaga, aby pole tekstowe nie było puste.
- wymaganie, aby data była w przyszłości;
- Modyfikowanie kształtu bryły na podstawie menu.
Rodzaje walidatorów
Walidatory są wykonywane w różnym czasie, w zależności od tego, jakiego rodzaju walidatora używają .
Weryfikatory klas są częścią definicji klasy typu pola i są częścią zwykle służy do ograniczania typu wartości dopuszczalnej w polu (np. liczba akceptowalne są tylko cyfry). Walidatory klas są uruchamiane dla wszystkich wartości przekazywane do pola (wraz z wartością przekazaną do konstruktora).
Więcej informacji o walidatorach klas znajdziesz w Wdrażanie walidatora klas sekcji Tworzenie pola niestandardowego.
Lokalne walidatory są definiowane podczas tworzenia pola. Lokalne walidatory działają na wszystkich wartościach przekazywanych do pola z wyjątkiem wartości przekazywanych do pola . Oznacza to, że są one używane na:
- Wartości zawarte w pliku XML.
- Wartości przekazywane do setValue.
- Wartości przekazywane do setFieldValue.
- Wartości zmienione przez użytkownika.
Walidatory klas są uruchamiane przed tymi lokalnymi, ponieważ działają one stróżów prawa. Sprawdzają, czy wartość jest prawidłowego typu przed przekazaniem włącz go.
Aby uzyskać więcej informacji o sekwencji weryfikacji wartości oraz o wartościach w argumencie można znaleźć w sekcji Wartości.
Rejestrowanie lokalnego walidatora
Lokalne walidatory można rejestrować na 2 sposoby:
- Dodano bezpośrednio w konstruktorze pola.
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));
}
};
- Na 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);
}
};
Każda z powyższych metod może być zawarta w elemencie extension, na potrzeby formatu JSON.
Wartość pola może się bardzo różnić w zależności od jego typu zweryfikowana (np. w polu liczbowym zostanie zapisana liczba, a w polu tekstowym zapisze ciąg znaków), więc najlepiej zapoznać się z dokumentacją konkretnego przed utworzeniem walidatora.
Zwracane wartości
Wartość zwrotna walidatora określa dalsze działanie pola. OK 3 możliwości:
Zmodyfikowana wartość zwrotu
Zmodyfikowana lub inna wartość, która staje się nową wartością pola. Często używa się go do czyszczenia wartości, np. przez usunięcie końcowych odstępu.
Przykład walidatora zmian:
// Remove all 'a' characters from the text input's value.
var validator = function(newValue) {
return newValue.replace(/\a/g, '');
};
Wartość zwrotu zerowej
Null, co oznacza, że podana wartość jest nieprawidłowa. W większości przypadków
zignorujesz wartość wejściową. Dokładne zachowanie jest określone przez
doValueInvalid_
funkcja.
Przykład walidatora 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;
};
Niezdefiniowana wartość zwrotu
Niezdefiniowana (lub brak zwrotu) wartość wejściowa, co oznacza, że wartość wejściowa powinna stać się nową wartością pola. Typy walidatorów działają jak detektory zmian.
Przykład walidatora detektora:
// Log the new value to console.
var validator = function(newValue) {
console.log(newValue);
};
Zwróć uwagę, że wyświetlany tekst nie musi odzwierciedlać wartości pola wartość.
Wartość
Wewnątrz walidatora this
odnosi się do pola, a nie do bloku. W razie potrzeby
aby uzyskać dostęp do bloku walidatora, użyj funkcji getSourceBlock
. Dostępne opcje
użyj też
funkcja powiązania
w celu ustawienia kontekstu, w którym wywoływany jest walidator.
Przykładowy kod z zastosowaniem parametru 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);
}
};
Przykładowy kod z zastosowaniem bind (powiąż):
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);
}
};