Champs de variables

Un champ de variable stocke une chaîne en tant que valeur et une chaîne en tant que texte. La valeur est l'ID d'une variable, tandis que le texte est le nom d'une variable.

Champ de variable

Champ de variable avec l'éditeur ouvert

Champ de variable dans le bloc réduit

Création

Non typée

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');
  }
};

Saisie effectuée

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');
  }
};

Le constructeur de variable utilise un nom de variable facultatif, valideur, un tableau facultatif de variables et un type par défaut facultatif.

  • Le nom de la variable doit être une chaîne. Il s'agira du nom variable initiale que le champ contient. S'il est nul ou non défini, il s'agit d'un nom unique est généré.
  • Les types de variables doivent être un tableau de chaînes. Cela indique au champ les types de variables que le champ peut contenir (c'est-à-dire les types de variables à ajouter au menu déroulant). Si la valeur est nulle ou non définie, tous les types de variables doit être acceptée (et ajoutée au menu déroulant).
  • Le type par défaut doit être une chaîne. Il sera utilisé lors de la création le modèle de variable initial du champ. Si ce champ est défini, il doit être inclus dans le tableau des types de variables. Si elle est nulle ou non définie, cette valeur est définie par défaut à une chaîne vide, ce qui signifie que la variable initiale sera saisie de manière flexible.

→ Pour en savoir plus sur la saisie stricte, consultez Vérifications de type :

Sérialisation

JSON

Le code JSON d'un champ de variable se présente comme suit:

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

FIELDNAME est une chaîne qui fait référence à un champ de variable, et où la valeur est l'ID de la variable à laquelle le champ fait référence.

Si vous utilisez ce champ dans la boîte à outils, vous pouvez également spécifier le nom et (facultatif) taper directement, car aucune variable n'est disponible pour référence.

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

XML

Le code XML d'un champ de variable se présente comme suit:

<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
  • L'attribut name du nœud contient une chaîne faisant référence à un champ de variable.
  • L'attribut id du nœud contient l'ID de la variable que le champ de référence.
  • L'attribut variabletype du nœud contient le type de la variable. La variabletype suit les mêmes règles que le paramètre de type par défaut du constructeur.
  • Le texte interne du nœud correspond au nom de la variable. La valeur de texte interne suit les mêmes règles que le paramètre de nom de variable du constructeur.

Créer un programme de validation de variables

La valeur d'un champ de variable est une chaîne. Par conséquent, tous les validateurs doivent accepter une chaîne et renvoyer une chaîne, null ou undefined.

Voici un exemple de programme de validation qui n'accepte que certaines variables prédéfinies options. Ces variables doivent être définies avec Workspace.createVariable lorsque l'espace de travail est chargé.

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