Variablenfelder

In einem Variablenfeld werden ein String als Wert und ein String als Text gespeichert. Der Wert ist die ID einer Variablen, während der Text der Name einer Variablen ist.

Variablenfeld

Variablenfeld bei geöffnetem Editor

Variablenfeld in minimiertem Block

Erstellung

Ohne Eingabe

JSON

{
  "type": "example_variable_untyped",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_untyped'] = {
  init: function() {
    this.appendDummyInput()
        .appendField('variable:')
        .appendField(new Blockly.FieldVariable('x'), 'FIELDNAME');
  }
};

Eingegeben

JSON

{
  "type": "example_variable_typed",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x",
      "variableTypes": ["Number", "String"],
      "defaultType": "Number"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_typed'] = {
  init: function() {
    this.appendDummyInput()
      .appendField('variable:')
      .appendField(new Blockly.FieldVariable(
          'X',
          null,
          ['Number', 'String'],
          'Number'
      ), 'FIELDNAME');
  }
};

Der Variablenkonstruktor übernimmt einen optionalen Variablennamen, einen optionalen validator, ein optionales Array von Variablentypen und einen optionalen Standardtyp.

  • Der Variablenname sollte ein String sein. Dies ist der Name der Anfangsvariable, die das Feld enthält. Wenn er null oder nicht definiert ist, wird ein eindeutiger Name generiert.
  • Die Variablentypen sollten ein Array von Strings sein. Dadurch wird dem Feld mitgeteilt, welche Variablentypen das Feld enthalten kann (d.h. welche Typen von Variablen dem Drop-down-Menü hinzugefügt werden sollen). Wenn er null oder nicht definiert ist, werden alle Variablentypen akzeptiert (und dem Drop-down-Menü hinzugefügt).
  • Der Standardtyp sollte ein String sein. Dieser wird beim Erstellen des anfänglichen Variablenmodells des Felds verwendet. Wenn diese definiert ist, sollte sie im Variablentypen-Array enthalten sein. Wenn der Wert null oder nicht definiert ist, wird standardmäßig ein leerer String verwendet. Das bedeutet, dass die Anfangsvariable flexibel eingegeben wird.

→ Weitere Informationen zur strikten Eingabe finden Sie unter Typprüfungen.

Serialisierung

JSON

Der JSON-Code für ein Variablenfeld sieht so aus:

{
  "fields": {
    "FIELDNAME": {
      "id": "QJD^+@[RVIwbLSZoDb:V"
    }
  }
}

Dabei ist FIELDNAME ein String, der auf ein Variablenfeld verweist, und der Wert ist die ID der Variablen, auf die das Feld verweist.

Wenn Sie dieses Feld in der Toolbox verwenden, können Sie den Namen und (optionalen) Typ auch direkt angeben, da keine Variable verfügbar ist, auf die verwiesen werden kann.

{
  "fields": {
    "FIELDNAME": {
      "name": "my_variable",
      "type": "string"
    }
  }
}

XML

Der XML-Code für ein Variablenfeld sieht so aus:

<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
  • Das Attribut name des Knotens enthält einen String, der auf ein Variablenfeld verweist.
  • Das Attribut id des Knotens enthält die ID der Variablen, auf die das Feld verweist.
  • Das Attribut variabletype des Knotens enthält den Typ der Variablen. Für variabletype gelten dieselben Regeln wie für den Standardtypparameter des Konstruktors.
  • Der innere Text des Knotens ist der Name der Variable. Der innere Textwert folgt denselben Regeln wie der Variablennamensparameter des Konstruktors.

Variablenvalidierung erstellen

Der Wert eines Variablenfelds ist ein String. Daher müssen alle Validierungen einen String akzeptieren und einen String, null oder undefined zurückgeben.

Das folgende Beispiel zeigt eine Validierung, die nur einige vordefinierte Variablen als Optionen akzeptiert. Diese Variablen müssten beim Laden des Arbeitsbereichs mit der Funktion Workspace.createVariable definiert werden.

function(newValue) {
  var validIds = ['Worf', 'Riker', 'Picard'];
  if (validIds.indexOf(newValue) == -1) {
    return null;
  }
  return newValue;
}