In einem Variablenfeld wird ein String als Wert und ein String als Text gespeichert. Der Wert ist eine ID einer Variablen, der Text ist der Name einer Variablen.
Variablenfeld

Variablenfeld mit geöffnetem Editor

Variablenfeld in einem minimierten Block

Erstellung
Ohne Typangabe
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');
}
};
Mit Typangabe
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 akzeptiert einen optionalen Variablennamen, einen optionalen Validator, ein optionales Array von Variablen typen und einen optionalen Standardtyp.
- Der Variablenname muss ein String sein. Dies ist der Name der ursprünglichen Variablen, die das Feld enthält. Wenn er null oder nicht definiert ist, wird ein eindeutiger Name generiert.
- Die Variablentypen müssen ein Array von Strings sein. Dadurch wird dem Feld mitgeteilt, welche Variablentypen es enthalten kann (d.h. welche Variablentypen der Drop-down-Liste hinzugefügt werden sollen). Wenn er null oder nicht definiert ist, werden alle Variablentypen akzeptiert (und der Drop-down-Liste hinzugefügt).
- Der Standardtyp muss ein String sein. Er wird beim Erstellen des ursprünglichen Variablenmodells des Felds verwendet. Wenn er definiert ist, muss er im Array der Variablentypen enthalten sein. Wenn er null oder nicht definiert ist, wird standardmäßig ein leerer String verwendet. Das bedeutet, dass die ursprüngliche Variable flexibel typisiert wird.
→ Weitere Informationen zur strengen Typisierung finden Sie unter Typüberprüfungen.
Serialisierung
JSON
Das JSON 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 auch den Namen und den optionalen Typ direkt angeben, da keine Variable zum Verweisen verfügbar ist.
{
"fields": {
"FIELDNAME": {
"name": "my_variable",
"type": "string"
}
}
}
XML
Das XML für ein Variablenfeld sieht so aus:
<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
- Das Attribut
namedes Knotens enthält einen String, der auf ein Variablenfeld verweist. - Das Attribut
iddes Knotens enthält die ID der Variablen, auf die das Feld verweist. - Das Attribut
variabletypedes Knotens enthält den Typ der Variablen. Fürvariabletypegelten dieselben Regeln wie für den Standardtypparameter des Konstruktors. - Der innere Text des Knotens ist der Name der Variablen. Für den Wert des inneren Texts gelten dieselben Regeln wie für den Variablennamenparameter des Konstruktors.
Variablenvalidator erstellen
Der Wert eines Variablenfelds ist ein String. Daher müssen alle Validatoren einen String akzeptieren und einen String, null oder undefined zurückgeben.
Hier ist ein Beispiel für einen Validator, der nur einige vordefinierte Variablen als Optionen akzeptiert. Diese Variablen müssen mit der
Workspace.getVariableMap().createVariable
Funktion definiert werden, wenn der Arbeitsbereich geladen wird.
function(newValue) {
var validIds = ['Worf', 'Riker', 'Picard'];
if (validIds.indexOf(newValue) == -1) {
return null;
}
return newValue;
}
