Walidatory

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

Pole do wprowadzania tekstu z walidatorem modyfikującym

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

Pole do wprowadzania tekstu z walidatorem zerowym

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