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 "Variable"

Champ de variable avec l'éditeur ouvert

Champ variable sur le bloc réduit

Création

Non typé

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, un validator facultatif, un tableau facultatif de types de variables et un type par défaut facultatif.

  • Le nom de la variable doit être une chaîne. Il s'agira du nom de la variable initiale contenue dans le champ. S'il est nul ou non défini, un nom unique sera généré.
  • Les types de variables doivent être un tableau de chaînes. Cela indique au champ les types de variables qu'il peut contenir (c'est-à-dire les types de variables à ajouter au menu déroulant). Si elle est nulle ou non définie, tous les types de variables sont acceptés (et ajoutés à la liste déroulante).
  • Le type par défaut doit être une chaîne. Il sera utilisé lors de la création du modèle de variable initial du champ. Si elle est définie, elle doit être incluse dans le tableau de types de variables. Si elle est nulle ou non définie, cette valeur est définie par défaut sur 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 du type.

sérialisation

JSON

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

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

FIELDNAME est une chaîne faisant référence à un champ de variable, et la valeur est l'ID de la variable référencée par le champ.

Si vous utilisez ce champ dans la boîte à outils, vous pouvez également spécifier le nom et le type (facultatif) directement, car aucune variable de référence ne sera disponible.

{
  "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 référencée par le champ.
  • L'attribut variabletype du nœud contient le type de la variable. 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. Tous les validateurs doivent donc l'accepter et renvoyer une chaîne, null ou undefined.

Voici un exemple de programme de validation qui n'accepte que certaines variables prédéfinies en tant qu'options. Vous devez définir ces variables à l'aide de la fonction 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;
}