Aby rozszerzyć istniejące pole, musisz podklasyfikować wbudowane pole (np.FieldTextInput
, FieldColour
), a potem zmodyfikować jego część zgodnie ze swoimi potrzebami.
Niektóre części pola, które możesz modyfikować, to:
- Jest to edytor.
- Jest wyświetlany przy bloku.
- Wyświetlany tekst.
Jeśli chcesz utworzyć pole niestandardowe, które nie wymaga działania z żadnego wbudowanego pola, wybierz podklasę Field
.
Typowe rozszerzenia
Większość pól niestandardowych stanowi rozwinięcie jednego z tych 3 typów pól:
- Wprowadzanie tekstu: jeśli chcesz, aby użytkownicy mogli wpisywać tekst w polu, zastosuj rozszerzenie
FieldTextInput
. - Liczba: jeśli chcesz zapisać numer, wstaw rozszerzenie
FieldNumber
. - Menu: jeśli chcesz utworzyć menu, ale chcesz w nim przechowywać inny model niż domyślny ciąg znaków lub model graficzny, musisz rozszerzyć pole
FieldDropdown
.- Uwaga: zanim rozszerzysz zakres
FieldDropdown
, sprawdź, czy opcje dostosowywania w polu menu nie odpowiadają Twoim potrzebom.
- Uwaga: zanim rozszerzysz zakres
W pewnych okolicznościach możesz chcieć rozszerzyć pole innego typu. Na przykład FieldLabelSerializable
rozszerza zakres FieldLabel
.
Podklasy
import * as Blockly from 'blockly';
export class MyCustomTextField extends Blockly.FieldTextInput {
constructor(value, validator, config) {
super(value, validator, config);
}
}
Konstruktor podklasy pola wygląda bardzo podobnie do konstruktora pola niestandardowego. Podpis podkonstruktora powinien być zwykle taki sam jak podpis superkonstruktora.
JSON i rejestracja
Pamiętaj też, aby zarejestrować to pole raz:
Blockly.fieldRegistry.register('my_custom_text_field', MyCustomTextField);
i udostępnij w klasie implementację fromJson
, tak aby działała z formatem JSON:
static fromJson(options) {
const value = Blockly.utils.parsing.replaceMessageReferences(options.value);
return new MySubclassName(value);
}
Więcej informacji o rejestrowaniu pola znajdziesz w sekcji JSON i rejestracja w artykule Tworzenie pola niestandardowego.