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:
- Il suo editor.
- Il suo display nel blocco.
- Il testo che viene visualizzato.
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.
- Attenzione: prima di estendere
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.