Validatoren

Eine Validierung ist eine Funktion, die den neuen Wert in den Feldern annimmt und dann auf . Sie sind eine einfache Möglichkeit, ein Feld anzupassen. Sie ermöglichen es Ihnen, wenn sich der Wert eines Feldes ändert, die Eingabe geändert oder die Werte begrenzt werden. akzeptabel sind.

Hier einige Beispiele:

  • Ein Textfeld wird auf Buchstaben beschränkt.
  • Ein Textfeld darf nicht leer sein.
  • Voraussetzung ist, dass ein Datum in der Zukunft liegt.
  • Form eines Blocks mithilfe eines Drop-down-Menüs ändern

Arten von Validatoren

Validierungen werden je nach Art der Validierung zu unterschiedlichen Zeitpunkten ausgeführt. sind.

Klassenvalidierungen sind Teil der Klassendefinition eines Feldtyps und werden Wird normalerweise verwendet, um den für das Feld zulässigen Typ von Werten einzuschränken (z.B. „number“) -Felder akzeptieren nur numerische Zeichen). Klassenvalidierungen werden für alle Werte ausgeführt die an das Feld übergeben werden (einschließlich des Werts, der an den Konstruktor übergeben wurde).

Weitere Informationen zu Klassenvalidierungen finden Sie in der Klassenvalidierung implementieren im Abschnitt Benutzerdefinierte Felder erstellen.

Lokale Validatoren werden zum Zeitpunkt der Felderstellung definiert. Lokal Validatoren werden für alle Werte ausgeführt, die an das Feld übergeben werden, mit Ausnahme des Werts, der an das Feld Konstruktor. Das bedeutet, dass sie hier ausgeführt werden:

  • In XML enthaltene Werte.
  • An setValue übergebene Werte
  • An setFieldValue übergebene Werte.
  • Die Werte wurden vom Nutzer geändert.

Klassenvalidierungen werden vor lokalen Validatoren ausgeführt, weil sie wie für die Gatekeeper. Vor der Übergabe wird überprüft, ob der Wert vom richtigen Typ ist es an.

Weitere Informationen zur Reihenfolge der Wertvalidierung und Werte in allgemeine Informationen finden Sie unter „Werte“.

Lokale Validierung registrieren

Lokale Validatoren können auf zwei Arten registriert werden:

  • Direkt im Konstruktor eines Felds hinzugefügt.
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);
  }
};

Jede der oben genannten Methoden kann in einem Erweiterung, um das JSON-Format zu unterstützen.

Der Wert des Feldes kann je nach Typ des Feldes, validiert (z.B. wird in einem Zahlenfeld eine Zahl gespeichert, in einem Texteingabefeld einen String gespeichert. Lesen Sie daher am besten die Dokumentation , bevor Sie eine Validierung erstellen.

Rückgabewerte

Der Rückgabewert der Validierung bestimmt, was das Feld als Nächstes tut. Es gibt es drei Möglichkeiten:

Geänderter Rückgabewert

Ein geänderter oder anderer Wert, der dann zum neuen Wert des Felds wird. Dies wird häufig verwendet, um einen Wert zu bereinigen, z. B. indem nachgestellte Werte entfernt werden. Leerzeichen.

Beispiel für eine Änderungsvalidierung:

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

Texteingabefeld mit Änderungsvalidierung

Null-Rückgabewert

Null, was bedeutet, dass der angegebene Wert ungültig ist. In den meisten Fällen enthält das Feld den Eingabewert ignorieren. Das genaue Verhalten wird durch den doValueInvalid_ Funktion.

Beispiel für einen Nulling-Validator:

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

Texteingabefeld mit Validator für Nullwerte

Nicht definierter Rückgabewert

Nicht definiert (oder keine Rückgabeanweisung) oder der Eingabewert, was bedeutet, dass der sollte der Eingabewert zum neuen Wert des Felds werden. Diese Arten von Validatoren im Allgemeinen als Zuhörer von Veränderungen.

Beispiel für einen Listener-Validator:

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

Wie bereits erwähnt, spiegelt der angezeigte Text nicht unbedingt den Wert des Felds Wert:

Wert

Innerhalb eines Validators bezieht sich this auf das Feld, nicht auf den Block. Bei Bedarf greifen Sie mithilfe der Funktion getSourceBlock auf den Block innerhalb einer Validierung zu. Sie können verwenden Sie auch die bind -Funktion um den Kontext festzulegen, in dem die Validierung aufgerufen wird.

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

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