Blockly позволяет настраивать определенные функции путем замены соответствующих классов Blockly.
Заменяемые классы
Следующие блочные классы могут быть заменены:
Блочный класс | Интерфейс | Имя типа реестра |
---|---|---|
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 | -- |
Информацию о замене рендерера см. в разделе Создание пользовательских рендереров .
Создать заменяющий класс
Чтобы создать заменяющий класс, реализуйте функции в соответствующем интерфейсе. Вы можете реализовать все эти функции в новом классе или расширить класс Blockly и переопределить только те функции, которые хотите изменить. Единственное требование — реализация всех функций в интерфейсе (или базового класса) и соблюдение всех требований, описанных в комментариях к интерфейсу.
Чтобы указать средству проверки типов, что вы реализуете определенный интерфейс, аннотируйте свой класс тегом JSDoc @implements {InterfaceName}
(в JavaScript) или ключевым словом implements
(в TypeScript).
Расскажите Blockly о вашем заменяющем классе
Сообщить Blockly о заменяемом классе можно двумя способами: зарегистрировать его как класс по умолчанию для своего типа (предпочтительно) или внедрить его с помощью параметра конфигурации plugins
.
Зарегистрируйте свой заменяющий класс как класс по умолчанию
Предпочтительный способ сообщить Blockly о вашем замещающем классе — зарегистрировать его как класс по умолчанию для этого типа. Для этого вызовите Blockly.registry.register
, используя имя Blockly.registry.DEFAULT
, и установите параметр opt_allowOverrides
в true
.
Blockly.registry.register(
Blockly.registry.Type.VARIABLE_MODEL,
Blockly.registry.DEFAULT,
CustomVariableModel,
true,
);
Введите ваш заменяющий класс
Вы также можете внедрять замещающие классы с помощью параметра конфигурации plugins
. Это объект, который использует имена типов реестра в качестве имён свойств, а замещающие классы или зарегистрированные имена — в качестве значений свойств.
(Несмотря на имя свойства plugins
, ваш класс не нужно упаковывать и распространять через npm, как плагины, используемые для расширения Blockly .)
Либо передайте ваш заменяющий класс в Blockly.inject
:
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': CustomMetricsManagerClass
}
}
Или зарегистрируйте свой класс с помощью Blockly.registry.register
и передайте зарегистрированное имя в Blockly.inject
. Это полезно, если вы храните параметры конфигурации в формате JSON.
Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', CustomMetricsManagerClass);
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': 'YOUR_NAME'
}
}