Pour étendre un champ existant, vous devez sous-classer un champ intégré (par exemple,
FieldTextInput
, FieldColour
), puis modifiez-en une partie en fonction de vos besoins.
Vous pouvez modifier les parties suivantes d'un champ:
- Son editor (éditeur).
- Son Affichage bloqué.
- La texte s'affiche.
Si vous souhaitez créer un
champ personnalisé
qui n'a besoin d'aucun comportement à partir d'un champ intégré, vous devez sous-classer Field
.
Extensions courantes
La plupart des champs personnalisés étendent l'un de ces trois types:
- Saisie de texte: si vous souhaitez que vos utilisateurs saisissent du texte dans votre champ, vous devez étendre
FieldTextInput
- Nombre: si vous souhaitez stocker un numéro, prolongez
FieldNumber
. - Menu déroulant: si vous souhaitez créer un menu déroulant, mais que vous voulez qu'il stocke un autre modèle
que le modèle de chaîne ou d'image par défaut, vous devez étendre
FieldDropdown
.- Attention: Avant d'étendre
FieldDropdown
, vérifiez que la propriété Les options de personnalisation ne peuvent pas répondre à vos besoins.
- Attention: Avant d'étendre
Dans certains cas, vous pouvez souhaiter étendre un type de champ différent. Pour
Exemple : FieldLabelSerializable
étend FieldLabel
.
Sous-classement
import * as Blockly from 'blockly';
export class MyCustomTextField extends Blockly.FieldTextInput {
constructor(value, validator, config) {
super(value, validator, config);
}
}
Le constructeur de la sous-classe d'un champ ressemble beaucoup au constructeur de un champ personnalisé. La signature du sous-constructeur doit correspondent généralement à la signature du super-constructeur.
JSON et enregistrement
Vous devez également enregistrer le champ une fois:
Blockly.fieldRegistry.register('my_custom_text_field', MyCustomTextField);
et fournir une implémentation de fromJson
dans la classe afin qu'elle fonctionne avec
au format JSON:
static fromJson(options) {
const value = Blockly.utils.parsing.replaceMessageReferences(options.value);
return new MySubclassName(value);
}
Pour en savoir plus sur l'enregistrement d'un champ, consultez la page JSON et enregistrement. de la section "Création d'un champ personnalisé".