Campi variabili

In un campo variabile vengono memorizzate una stringa come valore e una stringa come testo. La value è l'ID di una variabile, mentre il testo è il nome di una variabile.

Campo variabile

Campo variabile con l'editor aperto

Campo variabile nel blocco compresso

Creazione

Non digitato

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

Tipo di testo

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 della variabile include il nome facoltativo della variabile, Convalida, un array facoltativo di variabili e un tipo predefinito facoltativo.

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

→ Per ulteriori informazioni sulla digitazione rigida, vedi Controlli dei tipi.

Serializzazione

JSON

Il codice JSON per un campo variabile è simile al seguente:

{
  "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 utilizzi questo campo negli strumenti, puoi anche specificare il nome e (facoltativo) digita direttamente, in quanto non ci saranno variabili disponibili riferimento.

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

XML

Il codice XML per un campo variabile è simile al seguente:

<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 del campo riferimenti.
  • L'attributo variabletype del nodo contiene il tipo di variabile. La variabletype segue le stesse regole del parametro di tipo predefinito del costruttore.
  • Il testo interno del nodo è il nome della variabile. Il valore del 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 tutti gli strumenti di convalida devono accettare una stringa e restituiscono una stringa, null o undefined.

Ecco un esempio di strumento di convalida che accetta solo alcune variabili predefinite come le opzioni di CPU e memoria disponibili. Queste variabili devono essere definite con il parametro Workspace.createVariable quando l'area di lavoro viene caricata.

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