Estensione di un campo esistente

Per estendere un campo esistente, devi sottoclasse un campo integrato (ad esempio FieldTextInput, FieldColour) e poi modificarne parte in base alle tue esigenze. Alcune parti di un campo che puoi modificare sono:

Se vuoi creare un campo personalizzato che non deve comportarsi da nessun campo integrato, devi sottoclasse Field.

Estensioni comuni

La maggior parte dei campi personalizzati estende uno di questi tre tipi:

  • Input di testo: se vuoi che gli utenti digitino nel campo, devi estendere FieldTextInput.
  • Numero: se vuoi archiviare un numero, devi estendere FieldNumber.
  • Menu a discesa: se vuoi creare un menu a discesa, ma vuoi che memorizzi un modello diverso da quello della stringa o dell'immagine predefinito, devi estendere FieldDropdown.
    • Attenzione: prima di estendere FieldDropdown, verifica che le opzioni di personalizzazione del campo a discesa non possano soddisfare le tue esigenze.

In determinate circostanze, potresti voler estendere un tipo di campo diverso. Ad esempio, FieldLabelSerializable si estende per FieldLabel.

Sottoclasse

import * as Blockly from 'blockly';

export class MyCustomTextField extends Blockly.FieldTextInput {

  constructor(value, validator, config) {
    super(value, validator, config);
  }
}

Il costruttore di una sottoclasse di un campo è molto simile al costruttore di un campo personalizzato. In genere, la firma del sub-costruttore deve corrispondere alla firma del super-costruttore.

JSON e registrazione

Devi registrare il campo anche una volta:

Blockly.fieldRegistry.register('my_custom_text_field', MyCustomTextField);

e fornisci un'implementazione di fromJson nella classe in modo che funzioni con il formato JSON:

static fromJson(options) {
  const value = Blockly.utils.parsing.replaceMessageReferences(options.value);
  return new MySubclassName(value);
}

Per ulteriori informazioni sulla registrazione di un campo, consulta la sezione JSON e registrazione in Creazione di un campo personalizzato.