Campi variabili

Un campo variabile memorizza una stringa come valore e una stringa come testo. Il valore è l'ID di una variabile, mentre il testo è il nome di una variabile.

Campo variabile

Campo variabile con editor aperto

Campo variabile nel blocco compresso

Creazione

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

Digitazione

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

Il costruttore di variabili prende il nome di una variabile facoltativa, uno validator facoltativo, un array facoltativo di tipi di variabili e un tipo predefinito facoltativo.

  • Il nome della variabile deve essere una stringa. Sarà il nome della variabile iniziale contenuta nel campo. Se è nullo o non definito, verrà generato un nome univoco.
  • I tipi di variabili devono essere un array di stringhe. Questo indica al campo i tipi di variabili che il campo può contenere (ovvero i tipi di variabili da aggiungere al menu a discesa). Se è null o non definita, tutti i tipi di variabili verranno accettati (e aggiunti al menu a discesa).
  • Il tipo predefinito deve essere una stringa. Verrà utilizzato durante la creazione del modello di variabile iniziale del campo. Se definito, deve essere incluso nell'array dei tipi di variabili. Se è nullo o se non è definito, per impostazione predefinita il valore è una stringa vuota, il che significa che la variabile iniziale viene digitata in modo flessibile.

→ Per ulteriori informazioni sulla digitazione rigorosa, consulta la pagina relativa ai controlli del tipo.

Serializzazione

JSON

Il codice JSON per un campo variabile ha il seguente aspetto:

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

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 stai utilizzando questo campo nella casella degli strumenti, puoi anche specificare direttamente il nome e il tipo (facoltativo), poiché non ci sarà alcuna variabile disponibile come riferimento.

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

XML

Il codice XML per un campo variabile ha il seguente aspetto:

<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
  • 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 di testo interno segue le stesse regole del parametro del nome della variabile del costruttore.

Creazione di uno strumento di convalida delle variabili

Il valore di un campo variabile è una stringa, quindi qualsiasi convalidatore deve accettare una stringa e restituire una stringa, null o undefined.

Ecco un esempio di strumento di convalida che accetta solo alcune variabili predefinite come opzioni. Queste variabili devono essere definite con la funzione Workspace.createVariable quando viene caricata l'area di lavoro.

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