Расширить существующее поле
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Чтобы расширить существующее поле, вы должны создать подкласс встроенного поля (например, FieldTextInput
, FieldColour
), а затем изменить его часть в соответствии с вашими потребностями. Некоторые части поля, которые вы можете изменить:
Если вы хотите создать настраиваемое поле , которому не требуется поведение какого-либо встроенного поля, вам следует создать подкласс Field
.
Общие расширения
Большинство настраиваемых полей расширяют один из этих трех типов:
- Ввод текста : если вы хотите, чтобы пользователи вводили данные в ваше поле, вам следует расширить
FieldTextInput
. - Number : Если вы хотите сохранить число, вам следует расширить
FieldNumber
. - Dropdown : если вы хотите создать раскрывающийся список, но хотите, чтобы в нем хранилась модель, отличная от модели строки или изображения по умолчанию, вам следует расширить
FieldDropdown
.- Внимание: перед расширением
FieldDropdown
убедитесь, что параметры настройки раскрывающегося поля не могут удовлетворить ваши потребности.
При определенных обстоятельствах вы можете захотеть расширить другой тип поля. Например FieldLabelSerializable
расширяет FieldLabel
.
Подклассы
import * as Blockly from 'blockly';
export class MyCustomTextField extends Blockly.FieldTextInput {
constructor(value, validator, config) {
super(value, validator, config);
}
}
Конструктор подкласса поля очень похож на конструктор настраиваемого поля . Подпись субконструктора обычно должна совпадать с подписью суперконструктора.
JSON и регистрация
Также необходимо один раз зарегистрировать поле:
Blockly.fieldRegistry.register('my_custom_text_field', MyCustomTextField);
и предоставьте реализацию fromJson
в классе, чтобы она работала с форматом JSON:
static fromJson(options) {
const value = Blockly.utils.parsing.replaceMessageReferences(options.value);
return new MySubclassName(value);
}
Дополнительные сведения о регистрации поля см. в разделе «JSON и регистрация» статьи «Создание настраиваемого поля».
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-04-14 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-04-14 UTC."],[[["To extend an existing Blockly field, subclass a built-in field like `FieldTextInput` or `FieldColour` and modify its editor, on-block display, or displayed text."],["For custom fields with unique behaviors, subclass the base `Field` class instead of extending an existing field."],["Common field extensions involve customizing text input (`FieldTextInput`), numbers (`FieldNumber`), or dropdowns (`FieldDropdown`) to meet specific needs."],["When subclassing, ensure your constructor matches the super-constructor's signature and register the field with `Blockly.fieldRegistry.register`."],["Implement the `fromJson` method in your custom field class to enable compatibility with the Blockly JSON format for serialization and deserialization."]]],["To extend an existing field, subclass a built-in field like `FieldTextInput` or `FieldColour`, modifying its editor, on-block display, or text. For unique fields, subclass `Field`. Common extensions include `FieldTextInput`, `FieldNumber`, and `FieldDropdown`. Subclass constructors should mirror the super-constructor's signature. Register the field using `Blockly.fieldRegistry.register()` and implement `fromJson` for JSON compatibility. Extending different fields such as `FieldLabelSerializable` is also possible.\n"]]