Blockly umożliwia dostosowywanie niektórych funkcji przez zastępowanie odpowiednich klas Blockly.
Klasy zastępowalne
Można zastąpić te klasy Blockly:
Zajęcia z Blockly | Interfejs | Nazwa typu rejestru |
---|---|---|
Blockly.dragging.Dragger |
Blockly.IDragger |
blockDragger |
Blockly.ConnectionChecker |
Blockly.IConnectionChecker |
connectionChecker |
Blockly.InsertionMarkerPreviewer |
Blockly.IConnectionPreviewer |
connectionPreviewer |
Blockly.HorizontalFlyout |
Blockly.IFlyout |
flyoutsHorizontalToolbox |
Blockly.VerticalFlyout |
Blockly.IFlyout |
flyoutsVerticalToolbox |
Blockly.MetricsManager |
Blockly.IMetricsManager |
metricsManager |
Blockly.Toolbox |
Blockly.IToolbox |
toolbox |
Blockly.VariableMap |
Blockly.IVariableMap |
variableMap |
Blockly.VariableModel |
Blockly.IVariableModel |
-- |
Informacje o tym, jak zastąpić moduł renderujący, znajdziesz w artykule Tworzenie niestandardowych modułów renderujących.
Tworzenie zajęć zastępczych
Aby utworzyć klasę zastępującą, zaimplementuj funkcje w odpowiednim interfejsie. Wszystkie te funkcje możesz zaimplementować w nowej klasie lub rozszerzyć klasę Blockly i zastąpić tylko te funkcje, które chcesz zmienić. Jedynym wymaganiem jest zaimplementowanie przez Ciebie (lub klasę bazową) wszystkich funkcji w interfejsie i przestrzeganie wszystkich wymagań opisanych w komentarzach w interfejsie.
Aby poinformować narzędzie do sprawdzania typów, że implementujesz konkretny interfejs, dodaj do klasy adnotację w postaci tagu @implements {InterfaceName}
JSDoc (w JavaScript) lub słowa kluczowego implements
(w TypeScript).
Informowanie Blockly o klasie zastępującej
Klasę zastępującą możesz przekazać do Blockly na 2 sposoby: zarejestrować ją jako domyślną klasę danego typu (zalecane) lub wstrzyknąć ją za pomocą opcji konfiguracji plugins
.
Zarejestruj klasę zastępczą jako domyślną
Zalecanym sposobem informowania Blockly o klasie zastępującej jest zarejestrowanie jej jako domyślnej dla danego typu. Aby to zrobić, wywołaj funkcję Blockly.registry.register
, używając nazwy Blockly.registry.DEFAULT
, i ustaw parametr opt_allowOverrides
na wartość true
.
Blockly.registry.register(
Blockly.registry.Type.VARIABLE_MODEL,
Blockly.registry.DEFAULT,
CustomVariableModel,
true,
);
Wstawianie klasy zastępczej
Możesz też wstawiać klasy zastępcze za pomocą plugins
opcji konfiguracji.
Jest to obiekt, który używa nazw typów rejestru jako nazw właściwości, a klas zastępczych lub zarejestrowanych nazw jako wartości właściwości.
(Pomimo nazwy właściwości plugins
Twoja klasa nie musi być spakowana i dystrybuowana za pomocą npm, tak jak wtyczki używane do rozszerzania Blockly).
Przekaż klasę zastępczą do Blockly.inject
:
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': CustomMetricsManagerClass
}
}
Możesz też zarejestrować klasę za pomocą instrukcji Blockly.registry.register
i przekazać zarejestrowaną nazwę do instrukcji Blockly.inject
. Jest to przydatne, jeśli opcje konfiguracji są przechowywane w formacie JSON.
Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', CustomMetricsManagerClass);
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': 'YOUR_NAME'
}
}