Per estendere un campo esistente, devi creare una sottoclasse a un campo incorporato (ad es.
FieldTextInput
, FieldColour
), quindi modificane parte in base alle tue esigenze.
Alcune parti di un campo che puoi modificare sono:
- È Editor.
- È display attivo.
- La testo visualizzato.
Se vuoi creare una
campo personalizzato
che non richiede un comportamento da alcun campo integrato, devi eseguire la sottoclasse Field
.
Estensioni comuni
La maggior parte dei campi personalizzati estende uno di questi tre tipi:
- Inserimento testo: se vuoi che gli utenti digitino nel tuo campo, estende la
FieldTextInput
. - Numero: se vuoi memorizzare un numero, devi estendere
FieldNumber
. - Menu a discesa: se vuoi creare un menu a discesa, ma vuoi che memorizzi un modello diverso.
rispetto alla stringa o al modello di immagine predefinito, devi estendere
FieldDropdown
.- Attenzione: prima di estendere
FieldDropdown
, verifica che il valore le opzioni di personalizzazione non sono in grado di soddisfare le tue esigenze.
- Attenzione: prima di estendere
In determinate circostanze, potresti voler estendere un tipo di campo diverso. Per
l'esempio FieldLabelSerializable
estende FieldLabel
.
API Subclassing
import * as Blockly from 'blockly';
export class MyCustomTextField extends Blockly.FieldTextInput {
constructor(value, validator, config) {
super(value, validator, config);
}
}
Il costruttore per la sottoclasse di un campo è molto simile al costruttore per un campo personalizzato. La firma del costruttore secondario in genere corrispondono alla firma del super-costruttore.
JSON e registrazione
Devi registrare il campo anche una volta:
Blockly.fieldRegistry.register('my_custom_text_field', MyCustomTextField);
e fornire 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 scoprire di più sulla registrazione di un campo, consulta JSON e registrazione in Creazione di un campo personalizzato.