Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Un campo variabile memorizza una stringa come valore e una stringa come testo. Il
valore è un ID di una variabile, mentre il testo è il nome di una variabile.
Il costruttore di variabili accetta un nome di variabile facoltativo, un validatore facoltativo, un array facoltativo di tipi di variabili e un tipo predefinito facoltativo.
Il nome della variabile deve essere una stringa. Questo sarà il nome della
variabile iniziale contenuta nel campo. Se è null o undefined, verrà generato un nome univoco.
I tipi di variabili devono essere un array di stringhe. Indica al campo
i tipi di variabili che può contenere (ovvero i tipi di variabili da
aggiungere al menu a discesa). Se è null o undefined, verranno accettati tutti i tipi di variabili (e aggiunti al menu a discesa).
Il tipo predefinito deve essere una stringa. Questo valore verrà utilizzato durante la creazione del modello di variabile iniziale del campo. Se è definito, deve essere incluso
nell'array dei tipi di variabili. Se è null o non definito, questo valore viene impostato
come stringa vuota, il che significa che la variabile iniziale sarà tipizzata in modo flessibile.
→ Per ulteriori informazioni sul controllo dei tipi, vedi
Controlli dei tipi.
Serializzazione
JSON
Il JSON per un campo variabile è simile al seguente:
Dove FIELDNAME è una stringa che fa riferimento a un campo variabile e
il valore è l'ID della variabile a cui fa riferimento il campo.
Se utilizzi questo campo nella casella degli strumenti, puoi anche specificare direttamente il nome e (facoltativamente) il tipo, poiché non sarà disponibile alcuna variabile a cui fare riferimento.
L'attributo name del nodo contiene una stringa che fa riferimento a un campo variabile.
L'attributo id del nodo contiene l'ID della variabile a cui fa riferimento il campo.
L'attributo variabletype del nodo contiene il tipo di variabile.
variabletype segue le stesse regole del parametro di tipo predefinito del costruttore.
Il testo interno del nodo è il nome della variabile. Il valore del testo interno
segue le stesse regole del parametro del nome della variabile del costruttore.
Creazione di un validatore di variabili
Il valore di un campo variabile è una stringa, quindi tutti i validatori devono accettare una stringa e
restituire una stringa, null o undefined.
Ecco un esempio di un validatore che accetta solo alcune variabili predefinite come
opzioni. Queste variabili devono essere definite con la funzione
Workspace.getVariableMap().createVariable
quando viene caricato lo spazio di lavoro.
[null,null,["Ultimo aggiornamento 2025-08-05 UTC."],[[["\u003cp\u003eVariable fields store a variable's ID as its value and the variable's name as its text, enabling blocks to interact with variables.\u003c/p\u003e\n"],["\u003cp\u003eYou can specify the variable's name, type, and validation rules during field creation to control its behavior.\u003c/p\u003e\n"],["\u003cp\u003eVariable fields can be serialized to JSON or XML for saving and loading block configurations.\u003c/p\u003e\n"],["\u003cp\u003eValidators can be used to restrict the variables a field can accept, ensuring data integrity.\u003c/p\u003e\n"],["\u003cp\u003eVariable fields can be pre-populated with specific variable names and types within the toolbox.\u003c/p\u003e\n"]]],[],null,["# Variable fields\n\nA variable field stores a string as its value, and a string as its text. The\nvalue is an ID of a variable, while the text is the name of a variable.\n\n#### Variable field\n\n#### Variable field with editor open\n\n#### Variable field on collapsed block\n\nCreation\n--------\n\n### Untyped\n\n### JSON\n\n {\n \"type\": \"example_variable_untyped\",\n \"message0\": \"variable: %1\",\n \"args0\": [\n {\n \"type\": \"field_variable\",\n \"name\": \"FIELDNAME\",\n \"variable\": \"x\"\n }\n ]\n }\n\n### JavaScript\n\n Blockly.Blocks['example_variable_untyped'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('variable:')\n .appendField(new Blockly.FieldVariable('x'), 'FIELDNAME');\n }\n };\n\n### Typed\n\n### JSON\n\n {\n \"type\": \"example_variable_typed\",\n \"message0\": \"variable: %1\",\n \"args0\": [\n {\n \"type\": \"field_variable\",\n \"name\": \"FIELDNAME\",\n \"variable\": \"x\",\n \"variableTypes\": [\"Number\", \"String\"],\n \"defaultType\": \"Number\"\n }\n ]\n }\n\n### JavaScript\n\n Blockly.Blocks['example_variable_typed'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('variable:')\n .appendField(new Blockly.FieldVariable(\n 'X',\n null,\n ['Number', 'String'],\n 'Number'\n ), 'FIELDNAME');\n }\n };\n\nThe variable constructor takes in an optional variable name, an optional\n[validator](#creating_a_variable_validator), an optional array of variable\ntypes, and an optional default type.\n\n- The **variable name** should be a string. This will be the name of the initial variable the field holds. If it is null or undefined a unique name will be generated.\n- The **variable types** should be an array of strings. This tells the field what types of variables the field can hold (i.e. what types of variables to add to the dropdown). If it is null or undefined, all variable types will be accepted (and added to the dropdown).\n- The **default type** should be a string. This will be used when creating the field's initial variable model. If this is defined, its should be included in the variable types array. If it is null or undefined this value defaults to an empty string, meaning the initial variable will be flexibly typed.\n\n→ For more information on strict typing, see\n[Type Checks](/blockly/guides/create-custom-blocks/type-checks).\n\nSerialization\n-------------\n\n### JSON\n\nThe JSON for a variable field looks like so: \n\n {\n \"fields\": {\n \"FIELDNAME\": {\n \"id\": \"QJD^+@[RVIwbLSZoDb:V\"\n }\n }\n }\n\nWhere `FIELDNAME` is a string referencing a variable field, and\nthe value is the ID of the variable the field references.\n\nIf you are using this field in the toolbox, you can also specify the name\nand (optional) type directly, since there will be no variable available to\nreference. \n\n {\n \"fields\": {\n \"FIELDNAME\": {\n \"name\": \"my_variable\",\n \"type\": \"string\"\n }\n }\n }\n\n### XML\n\nThe XML for a variable field looks like so: \n\n \u003cfield name=\"VARIABLE\" id=\"QJD^+@[RVIwbLSZoDb:V\" variabletype=\"\"\u003ename\u003c/field\u003e\n\n- The node's `name` attribute contains a string referencing a variable field.\n- The node's `id` attribute contains the ID of the variable the field references.\n- The node's `variabletype` attribute contains the type of the variable. The `variabletype` follows the same rules as the constructor's default type parameter.\n- The node's inner text is the name of the variable. The inner text value follows the same rules as the constructor's variable name parameter.\n\nCreating a variable validator\n-----------------------------\n\n| **Note:** For information on validators in general see [Validators](/blockly/guides/create-custom-blocks/fields/validators).\n\nA variable field's value is a string, so any validators must accept a string and\nreturn a string, `null`, or `undefined`.\n\nHere's an example of a validator that only accepts some predefined variables as\noptions. These variables would need to be defined with the\n[`Workspace.getVariableMap().createVariable`](/blockly/reference/js/blockly.ivariablemap_interface.createvariable_1_methodsignature)\nfunction when the workspace is loaded. \n\n function(newValue) {\n var validIds = ['Worf', 'Riker', 'Picard'];\n if (validIds.indexOf(newValue) == -1) {\n return null;\n }\n return newValue;\n }"]]