Zaawansowane opcje dostosowywania

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'
  }
}