Campos variables

Un campo de variable almacena una cadena como su valor y una cadena como su texto. El valor es un ID de una variable, mientras que el texto es el nombre de una variable.

Campo de variable

Un bloque con la etiqueta "variable:" y un campo desplegable con "x" seleccionado.

Campo de variable con el editor abierto

El mismo bloque con el menú desplegable abierto. El menú tiene los elementos "x", "Cambiar nombre de la variable…" y "Borrar la variable "x"".

Campo de variable en un bloque colapsado

El mismo bloque después de contraerse. Tiene la etiqueta "variable: x" y un borde derecho irregular para mostrar que está contraída.

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 recibe 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 no está definido, 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 no está definido, se aceptarán todos los tipos de variables (y se agregarán al menú desplegable).
  • El tipo predeterminado debe ser una cadena. Se usará cuando se cree el modelo de variable inicial del campo. Si se define, se debe incluir 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 tipificación estricta, consulta Verificaciones de tipo.

Serialización

JSON

El JSON de un campo de variable se ve de la siguiente manera:

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

En la que 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 de 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. variabletype 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 de texto interno sigue las mismas reglas que el parámetro de nombre de variable del constructor.

Crea un validador de variables

El valor de un campo de variable es una cadena, por lo que cualquier validador debe aceptar una cadena y mostrar una cadena, null o undefined.

Este es un ejemplo de un validador que solo acepta algunas variables predefinidas como opciones. Estas variables se deben definir con la función Workspace.createVariable cuando se carga el espacio de trabajo.

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

GIF animado que muestra la función de validación en acción. Cuando se elige &quot;Picard&quot; o &quot;Riker&quot; en el menú desplegable, este se establece en esa opción. Cuando se elige “x”, el menú desplegable se establece en la opción anterior, que es “Riker”.