Un campo de variable almacena una cadena como su valor y una cadena como su texto. El valor es el ID de una variable, mientras que el texto es el nombre de una variable.
Campo variable
Campo de variable con el editor abierto
Campo de variable en el bloque contraído
Creación
Sin tipo
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');
}
};
Escritos
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');
}
};
El constructor de variables admite un nombre de variable opcional, un validador opcional, un array opcional de tipos de variables y un tipo predeterminado opcional.
- El nombre de la variable debe ser una cadena. Este será el nombre de la variable inicial que contiene el campo. Si es nulo o indefinido, se generará un nombre único.
- Los tipos de variables deben ser un array de cadenas. Esto le indica al campo qué tipos de variables puede contener (es decir, qué tipos de variables agregar al menú desplegable). Si es nulo o indefinido, se aceptarán todos los tipos de variables (y se agregarán al menú desplegable).
- El tipo predeterminado debe ser una cadena. Esto se usará cuando se cree el modelo de variable inicial del campo. Si se define, debe incluirse en el array de tipos de variables. Si es nulo o no está definido, este valor se establece de forma predeterminada en una cadena vacía, lo que significa que la variable inicial tendrá un tipo flexible.
→ Para obtener más información sobre la escritura estricta, consulta Verificaciones de tipos.
Serialización
JSON
El JSON de un campo de variable se ve de la siguiente manera:
{
"fields": {
"FIELDNAME": {
"id": "QJD^+@[RVIwbLSZoDb:V"
}
}
}
Aquí, FIELDNAME
es una cadena que hace referencia a un campo de variable, y el valor es el ID de la variable a la que hace referencia el campo.
Si usas este campo en la caja de herramientas, también puedes especificar el nombre y el tipo (opcional) directamente, ya que no habrá ninguna variable disponible para hacer referencia.
{
"fields": {
"FIELDNAME": {
"name": "my_variable",
"type": "string"
}
}
}
XML
El XML de un campo variable se ve de la siguiente manera:
<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
- El atributo
name
del nodo contiene una cadena que hace referencia a un campo de variable. - El atributo
id
del nodo contiene el ID de la variable a la que hace referencia el campo. - El atributo
variabletype
del nodo contiene el tipo de la variable. Elvariabletype
sigue las mismas reglas que el parámetro de tipo predeterminado del constructor. - El texto interno del nodo es el nombre de la variable. El valor del texto interno sigue las mismas reglas que el parámetro del nombre de la variable del constructor.
Cómo crear un validador de variables
El valor de un campo de variable es una cadena, por lo que todos los validadores deben aceptar una cadena y devolver una cadena, null
o undefined
.
Este es un ejemplo de un validador que solo acepta algunas variables predefinidas como opciones. Estas variables se deberían definir con la función Workspace.getVariableMap().createVariable
cuando se cargue el espacio de trabajo.
function(newValue) {
var validIds = ['Worf', 'Riker', 'Picard'];
if (validIds.indexOf(newValue) == -1) {
return null;
}
return newValue;
}