Para extender un campo existente, debes crear una subclase de un campo integrado (p. ej., FieldTextInput
y FieldColour
) y, luego, modificar parte de él para que se adapte a tus necesidades.
Estas son algunas de las partes de un campo que puedes modificar:
- Su editor.
- Es la pantalla bloqueada.
- El texto que muestra
Si deseas crear un campo personalizado que no necesite el comportamiento de ningún campo integrado, debes crear una subclase Field
.
Extensiones comunes
La mayoría de los campos personalizados extienden uno de estos tres tipos:
- Entrada de texto: Si quieres que los usuarios escriban en tu campo, debes extender
FieldTextInput
. - Number: Si quieres almacenar un número, debes extender
FieldNumber
. - Menú desplegable: Si deseas crear un menú desplegable, pero quieres que almacene un modelo diferente al predeterminado de la cadena o la imagen, debes extender
FieldDropdown
.- Precaución: Antes de extender
FieldDropdown
, verifica que las opciones de personalización del campo desplegable no satisfagan tus necesidades.
- Precaución: Antes de extender
En ciertas circunstancias, es posible que desees extender un tipo de campo diferente. Por ejemplo, FieldLabelSerializable
extiende FieldLabel
.
Subclase
import * as Blockly from 'blockly';
export class MyCustomTextField extends Blockly.FieldTextInput {
constructor(value, validator, config) {
super(value, validator, config);
}
}
El constructor de la subclase de un campo es muy similar al constructor de un campo personalizado. Por lo general, la firma del subconstructor debe coincidir con la firma del superconstructor.
JSON y registro
También debes registrar el campo una vez:
Blockly.fieldRegistry.register('my_custom_text_field', MyCustomTextField);
y proporciona una implementación de fromJson
en la clase para que funcione con el formato JSON:
static fromJson(options) {
const value = Blockly.utils.parsing.replaceMessageReferences(options.value);
return new MySubclassName(value);
}
Para obtener más información sobre el registro de un campo, consulta la sección JSON y registro en Cómo crear un campo personalizado.